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

来源:互联网 发布:怎么复制别人淘宝店铺 编辑:程序博客网 时间:2024/06/03 23:00

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;}


0 0