제출 #1249637

#제출 시각아이디문제언어결과실행 시간메모리
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;
}

컴파일 시 표준 에러 (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...