QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#407215#8229. 栈sunrise20480 1ms3508kbC++141.9kb2024-05-08 10:52:572024-05-08 10:52:57

Judging History

你现在查看的是最新测评结果

  • [2024-05-08 10:52:57]
  • 评测
  • 测评结果:0
  • 用时:1ms
  • 内存:3508kb
  • [2024-05-08 10:52:57]
  • 提交

answer

#include<bits/stdc++.h>
using namespace std;
using ll=long long;
const int N=35;
const int mod=1e9+7;
int n,m;
int d[N];
unordered_map<int,int> ma;
vector<int> z;
vector<int> f,g;
vector<int> si;
void dfs(int no,int id){
    for(int x=0;x<d[1];++x){
        int y=x;
        while(y<n&&no&(1<<y))y+=d[1];
        if(y>=n)continue;
        if(ma[no|(1<<y)]==0){
            z.push_back(no|(1<<y));
            ma[no|(1<<y)]=z.size()-1;
            dfs(no|(1<<y),z.size()-1);
        }
    }
}
int main(){
    cin>>n>>m;
    for(int i=1;i<=m;++i){
        cin>>d[i];
    }
    z.push_back(0);
    dfs(0,0);
    sort(z.begin(),z.end());
    for(int i=0;i<z.size();++i){
        ma[z[i]]=i;
    }
    f.resize(z.size());
    g.resize(z.size());
    f[0]=(n/d[1]-1)*(n/d[1])/2*(d[1]-n%d[1])+(n/d[1])*(n/d[1]+1)/2*(n%d[1]);
    g[0]=1;
    for(int ii=0;ii<z.size();++ii){
        int k=z[ii];
        for(int x=0;x<d[1];++x){
            int y=x;
            while(y<n&&k&(1<<y))y+=d[1];
            if(y>=n)continue;
            int nf=f[ii],ng=g[ii];
            int kk=k|(1<<y),to=y;
            for(int i=2;i<=m;++i){
                si.clear();
                si.resize(d[i]);
                for(int j=0;j<n;++j){
                    if(j==to){
                        nf+=(j/d[i])-si[j%d[i]];
                    }
                    if(kk&(1<<j))si[j%d[i]]++;
                }
                to=(si[to%d[i]]-1)*d[i]+(to%d[i]);
                kk=0;
                for(int j=0;j<d[i];++j){
                    for(int t=0;t<si[j];++t){
                        kk+=(1<<(t*d[i]+j));
                    }
                }
            }
            int tid=ma[k|(1<<y)];
            if(f[tid]<nf){
                f[tid]=nf;
                g[tid]=0;
            }
            if(f[tid]==nf)g[tid]=(g[tid]+ng)%mod;
        }
    }
    cout<<f[ma[(1<<n)-1]]<<' '<<g[ma[(1<<n)-1]];
    //while(1);
    return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Subtask #1:

score: 0
Runtime Error

Test #1:

score: 0
Runtime Error

input:

4907 4910
2 763 3330 1
3 307 1 1
1 2262 3430 22699 89397
1 1915 4000 51541 67587
2 212 2990 9763
2 1086 2162 1
2 1813 4496 16760
1 51 2796 68005 99390
1 1267 1519 74236 66178
3 1768 23808 54314
2 900 4122 27758
3 3287 17350 28989
2 3277 4024 3633
2 444 4866 1
2 353 4219 1061
1 987 3141 99906 17320
2...

output:


result:


Subtask #2:

score: 0
Runtime Error

Test #6:

score: 0
Runtime Error

input:

99999 99998
1 5026 18575 27178 90423
3 30623 1 1
3 76936 1 1
1 77021 95683 84664 24734
1 46085 74886 40512 11266
3 5048 8594 22468
1 53318 77721 97151 70784
1 70645 91192 37556 13013
1 56752 56940 91812 62887
1 7928 34576 87339 69404
3 74875 32807 100970
3 22338 17221 25771
3 21421 20602 57957
3 717...

output:


result:


Subtask #3:

score: 0
Wrong Answer

Test #12:

score: 0
Wrong Answer
time: 1ms
memory: 3508kb

input:

100000 99993
1 47773 70467 16065 1
2 52349 78446 2304
3 40821 1 1
1 40216 93069 78144 1
1 41089 43671 76025 1
2 35263 68629 31066
3 79881 13534 57327
3 5556 1 1
2 21962 38192 1
1 664 58116 9417 1
3 28089 6039 7989
2 88500 90302 9946
3 63215 49410 60770
2 11069 89527 57581
2 70303 97603 12363
1 3420 ...

output:

0 0

result:

wrong answer 2nd numbers differ - expected: '43794', found: '0'

Subtask #4:

score: 0
Time Limit Exceeded

Test #17:

score: 0
Time Limit Exceeded

input:

99999 99996
3 77889 1 10000000000
1 6316 86327 89644 386
3 9260 1 10000000000
2 2603 47234 69717
2 20260 73011 19290
2 62477 81233 26127
1 50140 68508 37004 98794
2 14449 22788 16063
1 43860 84932 50375 21777
1 67345 94584 28202 66610
2 661 68654 1
1 14411 94422 82738 61196
1 16563 94416 4920 38408
...

output:


result:


Subtask #5:

score: 0
Skipped

Dependency #1:

0%