Submission #567224

#TimeUsernameProblemLanguageResultExecution timeMemory
567224tqbfjotldMisspelling (JOI22_misspelling)C++14
8 / 100
157 ms8852 KiB
#include <bits/stdc++.h>
using namespace std;
#define int long long

int rel[20];
int A[500005];
int B[500005];

int mem[20][26];

int func(int n, int last){
    if (mem[n][last]!=-1) return mem[n][last];
    if (n==1) return 1;
    if (rel[n-2]==1){
        return mem[n][last] = func(n-1,last);
    }
    int ans = 0;
    for (int x = 0; x<26; x++){
        if (rel[n-2]==0 && last>x){
            ans += func(n-1,x);
        }
        if (rel[n-2]==2 && last<x){
            ans += func(n-1,x);
        }
        ans %= 1000000007;
    }
    return mem[n][last] = ans;
}

 main(){
    int n,m;
    scanf("%lld%lld",&n,&m);
    for (int x = 0; x<m; x++){
        scanf("%lld%lld",&A[x],&B[x]);
        A[x]--; B[x]--;
    }
    int ans = 0;
    for (int x = 0; x<(int)pow(3,n-1); x++){
        int t = x;
        for (int y = 0; y<n-1; y++){
            rel[y] = t%3;
            //printf("%lld ",rel[y]);
            t/=3;
        }
        //printf("\n");
        bool can = true;
        for (int y = 0; y<m; y++){
            if (A[y]<B[y]){
                for (int z = 0; z<B[y]-A[y]; z++){
                    if (rel[A[y]+z]==0){
                        can = false;
                        break;
                    }
                    if (rel[A[y]+z]==2){
                        break;
                    }
                }
            }
            else{
                for (int z = 0; z<A[y]-B[y]; z++){
                    if (rel[B[y]+z]==2){
                        can = false;
                        break;
                    }
                    if (rel[B[y]+z]==0){
                        break;
                    }
                }
            }
        }
        if (can){
            //printf("hi\n");
            memset(mem,-1,sizeof(mem));
            for (int x = 0; x<26; x++){
                ans += func(n,x);
                ans %= 1000000007;
            }
        }
    }
    printf("%lld",ans);
}

Compilation message (stderr)

misspelling.cpp:30:2: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
   30 |  main(){
      |  ^~~~
misspelling.cpp: In function 'int main()':
misspelling.cpp:32:10: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   32 |     scanf("%lld%lld",&n,&m);
      |     ~~~~~^~~~~~~~~~~~~~~~~~
misspelling.cpp:34:14: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   34 |         scanf("%lld%lld",&A[x],&B[x]);
      |         ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
#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...