제출 #147693

#제출 시각아이디문제언어결과실행 시간메모리
147693JovanK26Ljetopica (COI19_ljetopica)C++14
22 / 100
1051 ms4700 KiB
    #include <bits/stdc++.h>
#define mod 1000000007
    using namespace std;
    long long n,k;
    string path;
    string a;
    string b;
    long long aval=0;
    long long bval=0;
    long long rez=0;
    bool vis[100000007];
    long long power(int k)
    {
        if(k==0)return (long long)1;
        if(k%2==0)
        {
            return (((power(k/2)%mod)*(power(k/2) %mod))%mod);
        }
        else
        {
            return ((((long long)2*(power(k/2)%mod)%mod)*(power(k/2)%mod))%mod);
        }
    }
    void solve(long long start,long long kk,long long nn,bool chk)
    {
        if(nn==path.size())
        {
            if(kk==0 && !vis[start] && start>=aval && start<=bval)
            {
                rez+=start;
                rez%=1000000007;
                vis[start]=1;
                //cout << start << endl;
            }
            return;
        }
        if(kk==0)
        {
            if(!chk)
            {
                if(path[nn]=='L')solve(2*start,kk,nn+1,chk);
                else
                {
                    solve(2*start+1,kk,nn+1,chk);
                }
            }
            else
            {
                if(path[nn]=='R')solve(2*start,kk,nn+1,chk);
                else
                {
                    solve(2*start+1,kk,nn+1,chk);
                }
            }

        }
        else
        {
            if(!chk)
            {
                if(path[nn]=='L')
                {
                    solve(2*start,kk,nn+1,chk);
                    solve(2*start+1,kk-1,nn+1,chk^1);
                }
                else
                {
                    solve(2*start+1,kk,nn+1,chk);
                    solve(2*start,kk-1,nn+1,chk^1);
                }

            }
            else
            {
                if(path[nn]=='R')
                {
                    solve(2*start,kk,nn+1,chk);
                    solve(2*start+1,kk-1,nn+1,chk^1);
                }
                else
                {
                    solve(2*start+1,kk,nn+1,chk);
                    solve(2*start,kk-1,nn+1,chk^1);
                }
            }
        }
    }
    int main()
    {
        cin >> n >> k;
        cin >> path;
        cin >> a;
        cin >> b;
        if(k>0)
        {
            long long br=0;
        for(long long i=a.size()-1;i>=0;i--)
        {
            if(a[i]=='1')aval+=(1<<br);
            br++;
        }
        br=0;
        for(long long i=b.size()-1;i>=0;i--)
        {
            if(b[i]=='1')bval+=(1<<br);
            br++;
        }
           solve(1,k,0,0);
           solve(1,k,0,1);
           cout << rez;
        }
        else
        {
            long long av=0;
            long long bv=0;
            long long br=0;
            for(long long i=a.size()-1;i>=0;i--)
        {
            if(a[i]=='1')
            {
                av+=power(br);
                av%=mod;
            }
            br++;
        }
        br=0;
        for(long long i=b.size()-1;i>=0;i--)
        {
            if(b[i]=='1')
            {
                bv+=power(br);
                bv%=mod;
            }
            br++;
        }
        if(av==bv)
        {
            cout << av%mod;
            return 0;
        }
        //cout << av << ' ' << bv<<endl;
        cout << (av%mod+bv%mod)%mod;
        }
        return 0;
    }

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

ljetopica.cpp: In function 'void solve(long long int, long long int, long long int, bool)':
ljetopica.cpp:26:14: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         if(nn==path.size())
            ~~^~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...