제출 #361298

#제출 시각아이디문제언어결과실행 시간메모리
361298tuank99lhpBoat (APIO16_boat)C++17
100 / 100
910 ms12396 KiB
#include <bits/stdc++.h>

using namespace std;
vector<long long> v;
vector<pair<long long,long long> > V;
int n,l[505],r[505],F[2][2005][505],mod,tinh[505],tinh2[2005][505];
long long lt(long long x,long long y)
{
    if (y==0) return 1;
    long long k=lt(x,y/2);
    if (y%2) return k*k%mod*x%mod;
             return k*k%mod;
}
int main()
{
    ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    cin>>n;
    for (int i=1;i<=n;++i)
    {
        cin>>l[i]>>r[i];
        v.push_back(l[i]);
        v.push_back(r[i]);
    }
    sort(v.begin(),v.end());
    v.resize(unique(v.begin(),v.end())-v.begin());

    long long ct=1;
    for (int i=0;i<v.size();++i)
    {
        if (ct<v[i]) V.push_back({ct,v[i]-ct});
        ct=v[i]+1;
        V.push_back({v[i],1});
    }

    for (int i=0;i<V.size();++i) F[0][i][0]=1;
    F[1][0][0]=1;

    ct=0;mod=1e9+7;
    for (int i=1;i<=500;++i) tinh[i]=lt(i,mod-2);

    for (int j=0;j<V.size();++j)
     for (int k=1;k<=n;++k) tinh2[j][k]=tinh[k]*(V[j].second-k+1)%mod;

    for (int i=1;i<=n;++i)
    {
        ct=1-ct;
        pair<long long,long long> X={l[i],0LL};
        l[i]=lower_bound(V.begin(),V.end(),X)-V.begin();
        X={r[i],0LL};
        r[i]=lower_bound(V.begin(),V.end(),X)-V.begin();
        for (int j=0;j<V.size();++j)
        {
            if (j) F[ct][j][0]=0;

            if (j) for (int k=0;k<=min(1LL*i,V[j-1].second);++k)
            {

                    F[ct][j][0]+=F[ct][j-1][k];
                    if (F[ct][j][0]>=mod) F[ct][j][0]-=mod;

            }

                for (int k=1;k<=min(1LL*i,V[j].second);++k)
                {
                    F[ct][j][k]=F[1-ct][j][k];

if (j>=l[i] && j<=r[i]){
                        long long X=F[1-ct][j][k-1];
                        X=X*tinh2[j][k]%mod;
                        F[ct][j][k]+=X;
                        if (F[ct][j][k]>=mod) F[ct][j][k]-=mod;
}

                }


            }
        }


    long long kq=mod-1;

     for (int k=0;k<=n;++k) {kq=(kq+F[ct][V.size()-1][k]);if (kq>=mod) kq-=mod;}
    cout<<kq;

    return 0;
}

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

boat.cpp: In function 'long long int lt(long long int, long long int)':
boat.cpp:11:5: warning: this 'if' clause does not guard... [-Wmisleading-indentation]
   11 |     if (y%2) return k*k%mod*x%mod;
      |     ^~
boat.cpp:12:14: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'if'
   12 |              return k*k%mod;
      |              ^~~~~~
boat.cpp: In function 'int main()':
boat.cpp:28:19: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   28 |     for (int i=0;i<v.size();++i)
      |                  ~^~~~~~~~~
boat.cpp:35:19: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<long long int, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   35 |     for (int i=0;i<V.size();++i) F[0][i][0]=1;
      |                  ~^~~~~~~~~
boat.cpp:41:19: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<long long int, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   41 |     for (int j=0;j<V.size();++j)
      |                  ~^~~~~~~~~
boat.cpp:51:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<long long int, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   51 |         for (int j=0;j<V.size();++j)
      |                      ~^~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...