Submission #1249637

#TimeUsernameProblemLanguageResultExecution timeMemory
1249637thanh3008Cryptography (NOI20_crypto)C++20
15 / 100
19 ms7344 KiB
#include <bits/stdc++.h> #define TASK "" #define fi first #define se second #define pb push_back #define ll long long using namespace std; const int N=3e5+7,MOD=1e9+7; ll n,a[N],b[N],giaithua[N],x[N],cnt=0; bool tangdan=1,giamdan=1,kt[N],ok=0,kdau=1; void backtrack(int pos){ for(int i=1;i<=n;i++){ if(ok) return; if(!kt[b[i]]){ x[pos]=b[i]; kt[b[i]]=1; if(pos>=n){ cnt++; if(cnt>=MOD) cnt-=MOD; ok=1; for(int i=1;i<=n;i++){ if(a[i]!=x[i]){ ok=0; break; } } if(ok) return; } else backtrack(pos+1); kt[b[i]]=0; } } } int main(){ if(fopen(TASK".inp","r")){ freopen(TASK".inp","r",stdin); freopen(TASK".out","w",stdout); } ios_base::sync_with_stdio(false); cin.tie(0);cout.tie(0); cin>>n; giaithua[0]=1; for(int i=1;i<=n;i++){ cin>>a[i]; b[i]=a[i]; giaithua[i]=(giaithua[i-1]*i)%MOD; } for(int i=1;i<n;i++){ if(a[i]>a[i+1]){ tangdan=0; break; } } for(int i=1;i<n;i++){ if(a[i]<a[i+1]){ giamdan=0; break; } } if(tangdan){ cout<<"1\n"; return 0; } else if(giamdan){ cout<<giaithua[n]<<"\n"; return 0; } if(a[1]>a[2]); for(int i=2;i<n;i++){ if(a[i]>a[i+1]){ kdau=0; break; } } if(kdau){ cout<<((a[1]-1)*giaithua[n-1])%MOD<<"\n"; return 0; } if(n<=10){ sort(b+1,b+n+1); backtrack(1); cout<<cnt<<"\n"; } return 0; }

Compilation message (stderr)

Crypto.cpp: In function 'int main()':
Crypto.cpp:39:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   39 |         freopen(TASK".inp","r",stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
Crypto.cpp:40:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   40 |         freopen(TASK".out","w",stdout);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...