hdu 5229 ZCC loves strings

题意:

CC有N个字符串,他正在和Miss G.用这N个字符串玩一个小游戏。ZCC会从这N个串中等概率随机选两个字符串(不可以是同一个)。然后,ZCC和Miss G.轮流操作。Miss G.总是先操作的。在每轮中,操作者可以选择操作A或操作B。

操作A:在两个串中选择一个当前非空的串,然后在这个串的末尾删去一个字符。

操作B: 若当前两个串完全相同且非空,则可以使用这个操作。此时两个串都被清空。

不能操作的玩家输掉了这个游戏。

ZCC想要知道他输掉游戏的概率是多少(也就是Miss G.获胜的概率)。

限制:

2 <= N <= 20000; 字符串总长度不超过200000

思路:

其实博弈很简单,先特判两个字符串是否相同,如果相同则Miss G.赢,否则看两个字符串长度和的奇偶,奇则Miss G.赢,偶则Miss G.输。

因为,对于操作B,除了第一步,在后续的博弈里面根本没有机会执行。

/*hdu 5229 ZCC loves strings
  题意:
  CC有N个字符串,他正在和Miss G.用这N个字符串玩一个小游戏。ZCC会从这N个串中等概率随机选两个字符串(不可以是同一个)。然后,ZCC和Miss G.轮流操作。Miss G.总是先操作的。在每轮中,操作者可以选择操作A或操作B。
  操作A:在两个串中选择一个当前非空的串,然后在这个串的末尾删去一个字符。
  操作B: 若当前两个串完全相同且非空,则可以使用这个操作。此时两个串都被清空。
  不能操作的玩家输掉了这个游戏。
  ZCC想要知道他输掉游戏的概率是多少(也就是Miss G.获胜的概率)。
  限制:
  2 <= N <= 20000; 字符串总长度不超过200000
  思路:
  其实博弈很简单,先特判两个字符串是否相同,如果相同则Miss G.赢,否则看两个字符串长度和的奇偶,奇则Miss G.赢,偶则Miss G.输。
  因为,对于操作B,除了第一步,在后续的博弈里面根本没有机会执行。
 */
#include<iostream>
#include<cstdio>
#include<map>
#include<algorithm>
using namespace std;
#define LL __int64
const int N=20000;
string s[N];
map<string,int> mp;
int main(){
	ios_base::sync_with_stdio(false);
	int T;
	cin>>T;
	int n;
	while(T--){
		LL ji=0;
		LL ou=0;
		mp.clear();
		cin>>n;
		for(int i=0;i<n;++i){
			cin>>s[i];
			++mp[s[i]];
			if(s[i].length()%2==0) ++ou;
			else ++ji;
		}
		sort(s,s+n);
		int cnt=unique(s,s+n)-s;
		LL fz=0,fm;
		for(int i=0;i<cnt;++i){
			LL tmp=mp[s[i]];
			fz+=tmp*(tmp-1)/2;
		}
		fz+=ji*ou;
		//cout<<fz<<endl;
		fm=(LL)n*(n-1)/2;
		LL d=__gcd(fz,fm);
		fz/=d;
		fm/=d;
		cout<<fz<<"/"<<fm<<endl;
	}
	return 0;
}

时间: 2024-10-09 13:27:15

hdu 5229 ZCC loves strings的相关文章

hdu 5229 ZCC loves strings(Bestcoder Round #41)

ZCC loves strings                                                       Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 262144/131072 K (Java/Others) Total Submission(s): 286    Accepted Submission(s): 108 Problem Description ZCC has got N st

HDOJ 5229 ZCC loves strings

ZCC loves strings Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 262144/131072 K (Java/Others) Total Submission(s): 184    Accepted Submission(s): 70 Problem Description ZCC has got N strings. He is now playing a game with Miss G.. ZCC will

hdu 5299 ZCC loves strings

结论:对于串a和b,游戏中先手必胜当且仅当|a|+|b|为奇数或a=b. 我们按|a|+|b|的大小从小到大考虑所有的情况. 当|a|+|b|=0时,显然先手必败,符合结论. 假设已经证明了|a|+|b|=k的所有情况满足结论,现在考虑|a|+|b|=p的情况. 若p是奇数,先手只需要选择长度较短的不为空的串,并使用A操作,就可以转移到|a|+|b|为偶数并且两个串不相等或者两个串均为空的情况,这种情况先手必败,故此时先手必胜. 若p是偶数,如果两个串相等,显然先手只需要选择使用B操作就能获得胜

HDU 4873 ZCC Loves Intersection(JAVA、大数、推公式)

在一个D维空间,只有整点,点的每个维度的值是0~n-1 .现每秒生成D条线段,第i条线段与第i维度的轴平行.问D条线段的相交期望. 生成线段[a1,a2]的方法(假设该线段为第i条,即与第i维度的轴平行)为,i!=j时,a1[j]=a2[j],且随机取区间[0,n-1]内的整数.然后a1[i],a2[i]在保证a1[i]<a2[i]的前提下同样随机. 由于D条线段各自跟自己维度的轴平行,我们可以转换成只求第i个维度与第j个维度的相交期望,然后乘以C(2,n)就好了 显然线段[a1,a2]和线段[

HDU 4876 ZCC loves cards _(:зゝ∠)_ 随机输出保平安

GG,,,g艹 #include <cstdio> #include <iostream> #include <algorithm> #include <string.h> #include <vector> #include <queue> #include <math.h> using namespace std; vector<int>G[21][7];//G[i][j] 表示n=i k=j的情况下 二进

hdu 4882 ZCC Loves Codefires(数学题+贪心)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4882 ---------------------------------------------------------------------------------------------------------------------------------------------------------- 欢迎光临天资小屋:http://user.qzone.qq.com/593830943

hdu 4882 ZCC Loves Codefires(贪心)

# include<stdio.h> # include <algorithm> # include <string.h> using namespace std; struct node { int v; int t; }; struct node a[100010]; bool cmp(node a,node b) { return a.v *a.t+(a.v+b.v)*b.t<b.v*b.t+(a.v+b.v)*a.t; } int main() { int

JAVA hdu 4882 ZCC Loves Codefires

题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=4882 题解:参考题后Discuss javaherongwei 的讲解 考察序列中相邻的两题i, j(i在前).交换它们后,解出它们之前的题目所带来的时间对答案的贡献是不变的,它们对它们后面的题目的贡献也是不变的,其他题目之间对答案的贡献自然也是不变的.唯一的变化就是,原来的EiKj一项变成了EjKi一项.那么,为了使答案变优,需要满足的条件是EjKi≤EiKj.也即Ei/Ki≥Ej/Kj.那么,最

HDU 4876 ZCC loves cards

我决定记录下这么恶心的代码.比赛的时候头晕脑胀,写得好搓,错的地方好多好多,回来调了好久.... 做法大概就是C(20,6)选出卡牌后,再k!枚举排列,再k*k得出该排列能得出什么数字. 当然,光这样做绝对会T,里面加了各种剪枝后就1650ms险过了.. 最主要的剪枝是选出k张牌后,看牌能不能组成L~ans里面各个数字,能才进行下一步.然后k!可以拆成(k-x)!*(x!)..不过这里其实大概没什么大优化吧 #include<cstdio> #include<iostream> #