hdu 5229 找规律

假设选择了字符串a和b:

假设两人都按照最聪明的策略,那么观察一下可以找出规律:当a和b的字符串长度之和为奇数的时候zcc会败。

另外当a==b的时候zcc也会败(当时做的时候忘了这个了T^T)

接下来程序就好写了。总方案数是C(N,2)=N*(N-1)

判重要用map。

最后别忘了化简分数。

 1 #include <iostream>
 2 #include<cstring>
 3 #include<map>
 4 #include<vector>
 5 using namespace std;
 6 string s;
 7 int T,N,l;
 8 int ee[20010],oo[20010];
 9 string ss[20010];
10
11 int gcd(int a,int b)
12 {
13     if(a<b) swap(a,b);
14     if(b==0)    return a;
15     else return (gcd(b,a%b));
16 }
17
18 int main()
19 {
20     cin>>T;
21     while(T--)
22     {
23         memset(ee,0,sizeof(ee));
24         memset(oo,0,sizeof(oo));
25         map<string,int>  ht;
26         cin>>N;
27         int le=0,lo=0,lx=0;
28         for(int i=1;i<=N;i++)
29         {
30             cin>>s;
31             ss[i]=s;
32             l=s.length();
33             if(ht.count(s))
34             {
35                 //cout<<ht[s]<<endl;
36                 lx+=ht[s];
37                 ht[s]++;
38             }
39             else
40                 ht.insert(pair<string,int>(s,1));
41             if(l%2==0)
42             {
43                 ee[i]=1;
44                 le++;
45             }
46             else
47             {
48                 oo[i]=1;
49                 lo++;
50             }
51         }
52         //int lx=le*(le-1)/2+lo*(lo-1)/2;
53         lx+=le*lo;
54         int ly=N*(N-1)/2;
55         //cout<<le<<" "<<lo<<" -- "<<lx<<" "<<ly<<endl;
56         int gg=gcd(lx,ly);
57         lx=lx/gg;    ly=ly/gg;
58         cout<<lx<<"/"<<ly<<endl;
59     }
60     return 0;
61 }

时间: 2024-10-13 11:38:19

hdu 5229 找规律的相关文章

HDU 2147 找规律博弈

题目大意: 从右上角出发一直到左下角,每次左移,下移或者左下移,到达左下角的人获胜 到达左下角为必胜态,那么到达它的所有点都为必败态,每个点的局势都跟左,下,左下三个点有关 开始写了一个把所有情况都计算的打表 for(int i=n ; i>=1 ; i--){            for(int j=1 ; j<=m ; j++){                bool flag1 = p[i][j-1];                bool flag2 = p[i+1][j];  

hdu 1525 找规律博弈 (根据每一步的必然性以及可选择性决策)

题目来源:http://acm.hdu.edu.cn/showproblem.php?pid=1525 题意: 给出两个数,a和b,将大的数中,减去若干b的倍数,最终有一个数为0的话就胜了. 分析:  两个数a和b, 不妨设(a > b),总会出现的一个局面是b,a%b,这是必然的,如果a>=b&&a<2*b,那么只有一种情况,直接到b,a%b.否则有多种情况. a / b == 1   即a Ε [b , 2b)  , 下一步 只能到达   (b , a  - b) a

HDU 1564 找规律博弈

题目大意是: 从n*n的方格角落的一个起点出发,每次移到上下左右一个未曾到达过的位置,谁不能走了谁就输了 想了好久都想不出,看了大神的题解 Orz了 果然博弈不是脑残的游戏啊... 这里从起点出发,将所有方格两两连接,如果为偶数,那么这个起点会有一个对应方格与其两两连接,那么起点说明已经占据了一格 那么每次先手只要走到当前格对应相连的格子上就保证可以有路,那么后手就输了 反之n为基数,那么没有点与起点相连,说明先手必然走入一个新的1*2的小长条中,那么后手始终有1*2的小长条的方格与其对应,所以

hdu 6129(找规律lucas)

把初始a的每一个元素对m次变换的贡献写出来,发现是一个斜着的杨辉三角,根据lucas,当且仅当a&b == b,C(a, b)为奇数,又因为&和^运算极快,4e10的复杂度也就跑了一秒. #include <cstdio> #include <iostream> #include <algorithm> #include <cstring> #include <vector> #include <string> #in

2019CCPC网络赛 HDU 6702——找规律

题意 给定 $A,B$(都是正整数),求使得 $(A\  xor\  C) \& (B \ xor \  C)$ 最小的正整数 $C$,如果有多个满足条件的 $C$,输出最小的 $C$. 分析 看题3秒就猜到 $C = A \& B$,并写了个暴力程序对拍了一下,发现没错(然而wa了两发). $C$ 要求为正整数,所以 $C=0$ 时输出1 #include<bits/stdc++.h> using namespace std; typedef long long ll; ll

洛谷 P1014 Cantor表【蛇皮矩阵/找规律/模拟】

题目描述 现代数学的著名证明之一是Georg Cantor证明了有理数是可枚举的.他是用下面这一张表来证明这一命题的: 1/1 1/2 1/3 1/4 1/5 … 2/1 2/2 2/3 2/4 … 3/1 3/2 3/3 … 4/1 4/2 … 5/1 … … 我们以Z字形给上表的每一项编号.第一项是1/1,然后是1/2,2/1,3/1,2/2,… 输入输出格式 输入格式: 整数N(1≤N≤10000000) 输出格式: 表中的第N项 输入输出样例 输入样例#1: 复制 7 输出样例#1: 复

hdu 2147 kiki&#39;s game(DP(SG)打表找规律)

题意: n*m的棋盘,一枚硬币右上角,每人每次可将硬币移向三个方向之一(一格单位):左边,下边,左下边. 无法移动硬币的人负. 给出n和m,问,先手胜还是后手胜. 数据范围: n, m (0<n,m<=2000) 思路: dp[i][j]=0,说明从(i,j)这个点到时左下角先手败.dp[i][j]=1则先手胜. 然后记忆搜.但是记忆搜会超时. 搜完把整张表打出来,发现规律了,,,,然后,,,代码剩几行了. 代码: ///打表观察 /* int f[2005][2005]; int go(in

HDU 4990 Reading comprehension (找规律+矩阵快速幂)

题目链接:HDU 4990 Reading comprehension 题目给的一个程序其实就是一个公式:当N=1时 f[n]=1,当n>1时,n为奇数f[n]=2*f[n-1]+1,n为偶数f[n]=2*f[n-1]. 先不取模,计算前十个找规律.得到一个递推公式:f[n]=2*f[n-2]+f[n-1]+1 然后快速幂解决之. 给出一个神奇的网站(找数列通项):http://oeis.org/ AC代码: #include<stdio.h> #include<string.h&

HDU 6198 number number number 矩阵快速幂 找规律

题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=6198 题目描述: 给你一个k, 你可以用K个斐波那契数列中的数来构造一个数, 现在我们要求构造不出来的那个最小的数字 解题思路: 首先我们把斐波那契数列写出来, 0, 1, 1, 2, 3, 5, 8, 13, 21, 43 . . . . . . , 我们首先发现当K == 1 的时候构造不出来的数显然是4, 然后2个的时候是12, 三个是33, 然后找规律就是 f(2*n+3)-1 .....