您的位置:首页 > 其它

[Updating]Codeforces Round #402 (Div. 1)解题报告

2017-03-06 08:04 423 查看
A-String Game

简单的二分+模拟

//Author: Lixiang
#include<stdio.h>
#include<string.h>
const int maxn=200001;
struct String_Game{
char A[maxn],B[maxn],c[maxn];
int pos[maxn],N,n;
void init(){
scanf("%s%s",&A,&B);
N=strlen(A);
n=strlen(B);
for(int i=1;i<=N;i++)
scanf("%d",pos+i);
}
bool check(int p){
strcpy(c,A);
for(int i=1;i<=p;i++)c[pos[i]-1]=0;
int j=0;
for(int i=0;i<N&&j<n;i++){
if(c[i]==0)continue;
if(c[i]==B[j])j++;
}
if(j==n)return 1;
else return 0;
}
void work(){
int L=0,R=N,ans,M;
while(L<=R){
M=(L+R)>>1;
if(check(M)){
L=M+1;
ans=M;
}
else R=M-1;
}
printf("%d\n",ans);
}
}sol;
int main(){
sol.init();
sol.work();
return 0;
}

B-Bitwise Formula

大模拟

#include<stdio.h>
#include<map>
#include<string>
#include<iostream>
using namespace std;
const int maxn=100001,maxm=1001;
struct Bitwise_Formula{
map <string,int> hash;
int a[maxn][maxm],t[maxn],ta[maxn],tb[maxn],N,M;
void init(){
string s;
hash["?"]=0;
scanf("%d%d",&N,&M);
for(int i=1;i<=N;i++){
cin>>s;
hash[s]=i;
cin>>s;cin>>s;
if(s[0]=='0'||s[0]=='1'){
for(int j=0;j<M;j++)a[i][j]=s[j]-'0';
continue;
}
ta[i]=hash[s];
cin>>s;
t[i]=(s[0]=='A')?1:(s[0]=='O'?2:3);
cin>>s;
tb[i]=hash[s];
}
}
int check(int p,int k){
int f[maxn],sum=0;
f[0]=k;
for(int i=1;i<=N;i++){
if(t[i]==0)f[i]=a[i][p];
if(t[i]==1)f[i]=f[ta[i]]&f[tb[i]];
if(t[i]==2)f[i]=f[ta[i]]|f[tb[i]];
if(t[i]==3)f[i]=f[ta[i]]^f[tb[i]];
sum+=f[i];
}
return sum;
}
void work(){
int aa[maxn],bb[maxn],x,y;
for(int i=0;i<M;i++){
x=check(i,0),y=check(i,1);
aa[i]=y<x,bb[i]=x<y;
}
for(int i=0;i<M;i++)printf("%d",aa[i]);
puts("");
for(int i=0;i<M;i++)printf("%d",bb[i]);
puts("");
}
}sol;
int main(){
sol.init();
sol.work();
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  codeforces