标签:string dba rip lse 优先 词库 std line second
两个人轮流说单词,每个人只能说自己的的单词库里的单词。被任意方说过的单词不能再说。一个单词只会在某个人的单词库中出现一次,但是可能同时出现在两个人的单词库中。最先没有单词说的人负。求游戏的胜负。 \(n,m \le 1000, L_s \le 500\)
最优策略必然是优先说掉所有公共单词,然后再说非公共单词。
设公共单词的数量为 \(c\) 。
若 \(c\) 为奇数,那么最后一个说出公共单词的是先手,此时若 \(n \ge m\) 则先手胜。
若 \(c\) 为偶数,那么最后一个说出公共单词的是后手,此时若 \(n > m\) 则先手胜。
#include <bits/stdc++.h>
using namespace std;
map <string,int> mp;
string tmp;
int n,m;
int main()
{
ios::sync_with_stdio(false);
cin>>n>>m;
for(int i=1; i<=n; i++)
cin>>tmp, mp[tmp]++;
for(int i=1; i<=m; i++)
cin>>tmp, mp[tmp]++;
int c=0;
for(map<string,int>::iterator it=mp.begin(); it!=mp.end(); it++)
c+=(it->second==2);
if(c&1)
cout<<(n>=m?"YES":"NO")<<endl;
else
cout<<(n>m?"YES":"NO")<<endl;
}
[CF755B] PolandBall and Game - 博弈论
标签:string dba rip lse 优先 词库 std line second
原文地址:https://www.cnblogs.com/mollnn/p/11730267.html