http://codeforces.com/contest/355
//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
题意:
题解:又想复杂了沃日。
#include <algorithm>
#include <iostream>
#include <cstring>
#include <vector>
#include <cstdio>
#include <string>
#include <cmath>
#include <queue>
#include <set>
#include <map>
using namespace std;
typedef long long ll;
#define de(x) cout << #x << "=" << x << endl
int main() {
int n,m;
while(~scanf("%d%d",&n,&m)) {
if(m==0&&n>1) {
puts("No solution");
continue;
}
printf("%d",m);
for(int i=1;i<n;++i) printf("0");
puts("");
}
return 0;
}
//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
两个人博弈,每次在现有的字符串(初始为空)后面添加一个字符。(要求每次的字符串必须是正确字符串的前缀)第一个人要让生成字符串的a多。第二个人要让b多。两人都采取最优策略,问最后谁赢。
题解:一开始看错题目,大家都-1。
暴力肯定是不行的(C(2n,n))。所以把一个斜线上同个字母的状压成一个状态。
(别人写的代码好优雅啊!)
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
char s[20][20];
int d[40][1<<20],vis[40][1<<20];
int n;
int dp(int dis,int sta) {
if(vis[dis][sta]) return d[dis][sta];
vis[dis][sta]=1;
int &ans=d[dis][sta];
if(dis==n*2-2) {
ans=0;
} else {
int cnt=0;
int mask[26];
memset(mask,0,sizeof(mask));
for(int i=0;i<=dis+1;++i) {
int j=dis+1-i;
if(i>=n||j>=n) continue;
mask[s[i][j]-'a']|=(1<<cnt);
++cnt;
}
if(dis&1) ans=-99999999;
else ans=99999999;
for(int i=0;i<26;++i) {
int t;
if(dis<n-1) t=(sta|(sta<<1))&mask[i];
else t=(sta|(sta>>1))&mask[i];
if(t==0) continue;
int now=0;
if(i==0) now=1;
else if(i==1) now=-1;
if(dis&1) ans=max(ans,now+dp(dis+1,t));
else ans=min(ans,now+dp(dis+1,t));
}
}
if(dis==0) {
if(s[0][0]=='a') ++ans;
if(s[0][0]=='b') --ans;
}
return ans;
}
int main() {
while(~scanf("%d",&n)) {
for(int i=0;i<n;++i) scanf("%s",s[i]);
memset(vis,0,sizeof(vis));
int ans=dp(0,1);
if(ans>0) puts("FIRST");
else if(ans==0) puts("DRAW");
else puts("SECOND");
}
return 0;
}
//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
题解:http://blog.csdn.net/qq_32707623/article/details/53571740