제출 #845347

#제출 시각아이디문제언어결과실행 시간메모리
845347vjudge1Trener (COCI20_trener)C++17
110 / 110
1674 ms6232 KiB
#ifndef Local
    #pragma GCC optimize("O3,unroll-loops")
    #pragma GCC target("avx2,bmi,bmi2,lzcnt,popcnt")
#endif
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp> 
#include <ext/pb_ds/tree_policy.hpp>
#include <ext/pb_ds/detail/standard_policies.hpp>
#define int long long
#define pb push_back
#define lim 300000
#define till 40001
// # of primes till 1e6 = 7e4
using namespace std;
using namespace __gnu_pbds;

typedef tree<int,null_type,less<int>,rb_tree_tag,tree_order_statistics_node_update>ordered_set;
using pii = array<int,2>;

const int mod=1000000007ll;

bool sbc(string*s1,string*s2){
    int i=0;
    bool nope=0;
    for(;i<s1->size();i++){
        if(s1->at(i)!=s2->at(i)){
            nope=1;
            break;
        }
    }
    if(!nope)return 1;
    i=0;
    nope=0;
    for(;i<s1->size();i++){
        if(s1->at(i)!=s2->at(i+1)){
            nope=1;
            break;
        }
    }
    if(!nope)return 1;
    return 0;
}

void solve(){
    int n,k;
    cin>>n>>k;
    string s[n][k];
    for(int i=0;i<n;i++){
        for(int j=0;j<k;j++){
            cin>>s[i][j];
        }
    }
    int dp[n][k];
    for(int i=0;i<n;i++)for(int j=0;j<k;j++){
        dp[i][j]=0;
    }
    for(int i=0;i<k;i++)dp[n-1][i]=1;
    for(int i=n-2;0<=i;i--){
        for(int j=0;j<k;j++){
            for(int t=0;t<k;t++){
                if(sbc(&s[i][j],&s[i+1][t])){
                    dp[i][j]+=dp[i+1][t];
                    dp[i][j]%=mod;
                }
            }
        }
    }
    /*
    for(int i=0;i<n;i++){
        for(int j=0;j<k;j++){
            cerr<<dp[i][j]<<" ";
        }cerr<<"\n";
    }
    */
    int ans=0;
    for(int i=0;i<k;i++){
        ans+=dp[0][i];
        ans%=mod;
    }
    cout<<ans<<"\n";
}


signed main(){
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);cout.tie(NULL);
#ifdef Local  
#ifndef INTERACTIVE
    freopen("in","r",stdin);
#endif
    freopen("out","w",stdout);
#endif
    int t=1;
    //cin>>t;
    while (t--)
    {
        solve();
    }
}

컴파일 시 표준 에러 (stderr) 메시지

trener.cpp: In function 'bool sbc(std::string*, std::string*)':
trener.cpp:25:11: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   25 |     for(;i<s1->size();i++){
      |          ~^~~~~~~~~~~
trener.cpp:34:11: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   34 |     for(;i<s1->size();i++){
      |          ~^~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...