Submission #558066

#TimeUsernameProblemLanguageResultExecution timeMemory
558066groshiCrossing (JOI21_crossing)C++17
26 / 100
257 ms18252 KiB
#include<iostream> using namespace std; string s[10]; char jaki[4]={'J','O','I'}; long long pierw=1000696969; long long pot[300000]; long long pref[300000]; long long hasze[300000]; long long drzewo[600000]; long long lazy[600000]; int n; char brak(char a,char b) { for(int i=0;i<3;i++) if(jaki[i]!=a && jaki[i]!=b) return jaki[i]; } void comp(int co1,int co2,int gdzie) { string pom=""; for(int i=0;i<s[co1].length();i++) { if(s[co1][i]==s[co2][i]) pom.push_back(s[co1][i]); else pom.push_back(brak(s[co1][i],s[co2][i])); } s[gdzie]=pom; } void zrob() { comp(0,1,3); comp(0,2,4); comp(1,2,5); comp(3,2,6); comp(4,1,7); comp(0,5,8); } void pie() { pot[0]=1; for(int i=1;i<=200000;i++) pot[i]=pot[i-1]*pierw; pref[0]=1; for(int i=1;i<=200000;i++) pref[i]=pref[i-1]+pot[i]; for(int i=0;i<9;i++) { for(int j=0;j<s[i].length();j++) hasze[i]=hasze[i]+(s[i][j]-'A'+1)*pot[j]; //cout<<hasze[i]<<"\n"; } } void prop(int x,int l,int r) { if(lazy[x]==0) return; //cout<<pref[r-l]<<"\n"; drzewo[x]=(pref[r-l]*lazy[x]); if(l!=r) { lazy[x*2]=lazy[x]; lazy[x*2+1]=lazy[x]; } lazy[x]=0; } void upd(int x,int l,int r,int x1,int y1,int co) { //cout<<"jestem w "<<x<<"\n"; prop(x,l,r); if(x1>r || y1<l || l>r) return; if(x1<=l && r<=y1) { lazy[x]=co; prop(x,l,r); return; } int mid=(l+r)/2; upd(x*2,l,mid,x1,y1,co); upd(x*2+1,mid+1,r,x1,y1,co); drzewo[x]=drzewo[x*2]+drzewo[x*2+1]*pot[mid-l+1]; } long long idz() { prop(1,1,n); return drzewo[1]; } bool ok() { long long hasz=idz(); //cout<<hasz<<"\n"; for(int i=0;i<9;i++) if(hasz==hasze[i]) return 1; return 0; } int main() { cin.tie(0); cout.tie(0); ios_base::sync_with_stdio(0); cin>>n; cin>>s[0]>>s[1]>>s[2]; zrob(); pie(); int zap; cin>>zap; string wzor; cin>>wzor; for(int i=1;i<=wzor.length();i++) upd(1,1,n,i,i,wzor[i-1]-'A'+1); if(ok()) cout<<"Yes\n"; else cout<<"No\n"; while(zap--) { int a,b; char c; cin>>a>>b>>c; upd(1,1,n,a,b,c-'A'+1); if(ok()) cout<<"Yes\n"; else cout<<"No\n"; } return 0; }

Compilation message (stderr)

Main.cpp: In function 'void comp(int, int, int)':
Main.cpp:22:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   22 |     for(int i=0;i<s[co1].length();i++)
      |                 ~^~~~~~~~~~~~~~~~
Main.cpp: In function 'void pie()':
Main.cpp:49:22: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   49 |         for(int j=0;j<s[i].length();j++)
      |                     ~^~~~~~~~~~~~~~
Main.cpp: In function 'int main()':
Main.cpp:111:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  111 |     for(int i=1;i<=wzor.length();i++)
      |                 ~^~~~~~~~~~~~~~~
Main.cpp: In function 'char brak(char, char)':
Main.cpp:18:1: warning: control reaches end of non-void function [-Wreturn-type]
   18 | }
      | ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...