제출 #938206

#제출 시각아이디문제언어결과실행 시간메모리
938206Faisal_Saqib세 명의 친구들 (BOI14_friends)C++17
35 / 100
40 ms7468 KiB
#include <iostream> #include <set> using namespace std; #define ll long long const ll N=10000; ll pre[N],pw[N],base=717,mod=1e9+9; ll pre1[N],pw1[N],base1=911,mod1=1e9+7; int get(int l,int r)// one base indexing 1<=l<=n { if(r<l) return 0; return ((pre[r]-(pre[l-1]*pw[r-l+1])%mod)%mod+mod)%mod; } int get1(int l,int r)// one base indexing 1<=l<=n { if(r<l) return 0; return ((pre1[r]-(pre1[l-1]*pw1[r-l+1])%mod1)%mod1+mod1)%mod1; } int main() { int n; cin>>n; string s; cin>>s; pre[0]=0; pw[0]=1; for(int i=1;i<=n;i++) pw[i]=(pw[i-1]*base)%mod; for(int i=1;i<=n;i++) pre[i]=((pre[i-1]*base)%mod+(s[i-1]-'A'))%mod; pre1[0]=0; pw1[0]=1; for(int i=1;i<=n;i++) pw1[i]=(pw1[i-1]*base1)%mod1; for(int i=1;i<=n;i++) pre1[i]=((pre1[i-1]*base1)%mod1+(s[i-1]-'A'))%mod1; set<int> posa,pp; int len=(n-1)/2; for(int i=1;(n%2==1) and i<=n;i++) { ll fit=-1; ll sec=-1; ll fit1=0; ll sec1=0; ll hash=0; int len1=0; for(int j=1;j<=n;j++) { if(j==i) continue; hash=(hash*base)%mod; hash=(hash+s[j-1]-'A')%mod; len1++; if(len==len1) { len1=0; if(fit==-1) fit=hash; else sec=hash; hash=0; } } // int lf=(i-1); // if(lf<=len) // { // fit=((get(1,i-1)*pw[len-lf])%mod+get(i+1,i+len-lf))%mod; // sec=get(i+len-lf+1,n); // fit1=((get1(1,i-1)*pw1[len-lf])%mod1+get1(i+1,i+len-lf))%mod1; // sec1=get1(i+len-lf+1,i+len-lf+len); // } // else{ // fit=get(1,len); // sec=((get(len+1,i-1)*pw[n-i])%mod + get(i+1,n))%mod; // fit1=get1(1,len); // sec1=((get1(len+1,i-1)*pw1[n-i])%mod1 + get1(i+1,n))%mod1; // } if(fit==sec and fit1==sec1) { pp.insert(i); posa.insert(fit); } } if(posa.size()==0 or n%2!=1) { cout<<"NOT POSSIBLE\n"; } else if(posa.size()==1) { int j=*begin(pp); for(int i=1,p=0;p<len;i++) { if(i!=j) { cout<<s[i-1]; p++; } } cout<<endl; } else{ cout<<"NOT UNIQUE\n"; } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...