QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#733243#9543. Good Partitions0123456789_1#WA 1ms5676kbC++144.8kb2024-11-10 17:52:342024-11-10 17:52:36

Judging History

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

  • [2024-11-10 17:52:36]
  • 评测
  • 测评结果:WA
  • 用时:1ms
  • 内存:5676kb
  • [2024-11-10 17:52:34]
  • 提交

answer

// #include<bits/stdc++.h>
// using namespace std;
// int main(){
//     long n,q,i,j,k,i1,q1,q2,q3;
//     static long dp[310][160][160][3],s[160][160][160];
//     char z[310];
//     scanf("%ld %ld\n%s\n",&n,&q,z+1);
//     z[0]=z[n+1]='d';
//     i1=0;
//     for(i=1;i<=n;i++){
//         if(z[i]!='?')continue;
//         i1++;
//         if(i1==1){
//             if(z[i-1]!='a'&&z[i+1]!='a')dp[1][1][0][0]=1;
//             if(z[i-1]!='b'&&z[i+1]!='b')dp[1][0][1][1]=1;
//             if(z[i-1]!='c'&&z[i+1]!='c')dp[1][0][0][2]=1;
//             continue;
//         }
//         for(j=0;j<=min(i1,n+1>>1);j++){
//             for(k=0;k<=min(i1-j,n+1>>1);k++){
//                 if(i1-j-k>n+1>>1)continue;
//                 if(z[i-1]=='?'){
//                     if(z[i+1]!='a'){
//                         dp[i1][j][k][0]=dp[i1-1][j-1][k][1]+dp[i1-1][j-1][k][2];
//                     }
//                     if(z[i+1]!='b'){
//                         dp[i1][j][k][1]=dp[i1-1][j][k-1][0]+dp[i1-1][j][k-1][2];
//                     }
//                     if(z[i+1]!='c'){
//                         dp[i1][j][k][2]=dp[i1-1][j][k][0]+dp[i1-1][j][k][1];
//                     }
//                 }else{//if(i1==2&&j==1&&k==0)printf("a");
//                     if(z[i-1]!='a'&&z[i+1]!='a'){//if(i1==2&&j==1&&k==0)printf("a");
//                         dp[i1][j][k][0]=dp[i1-1][j-1][k][0]+dp[i1-1][j-1][k][1]+dp[i1-1][j-1][k][2];
//                     }
//                     if(z[i-1]!='b'&&z[i+1]!='b'){
//                         dp[i1][j][k][1]=dp[i1-1][j][k-1][0]+dp[i1-1][j][k-1][1]+dp[i1-1][j][k-1][2];
//                     }
//                     if(z[i-1]!='c'&&z[i+1]!='c'){
//                         dp[i1][j][k][2]=dp[i1-1][j][k][0]+dp[i1-1][j][k][1]+dp[i1-1][j][k][2];
//                     }
//                 }
//             }
//         }
//     }//printf("%ld - \n",dp[1][0][0][2]);
//     for(i=0;i<=min(i1,n+1>>1);i++){
//         for(j=0;j<=min(i1-i,n+1>>1);j++){
//             if(i1-i-j>n+1>>1)continue;
//             s[i+1][j+1][i1-i-j+1]=dp[i1][i][j][0]+dp[i1][i][j][1]+dp[i1][i][j][2];
//             //printf("%ld %ld %ld %ld\n",i,j,i1-i-j,s[i+1][j+1][i1-i-j+1]);
//         }
//     }
//     for(i=1;i<=151;i++){
//         for(j=1;j<=151;j++){
//             for(k=1;k<=151;k++){//if(i==0&&j==0&&k==4)printf("*%ld ",s[i-1][j][k]+s[i][j-1][k]+s[i][j][k-1]);
//                 s[i][j][k]+=s[i-1][j][k]+s[i][j-1][k]+s[i][j][k-1]-s[i-1][j-1][k]-s[i-1][j][k-1]-s[i][j-1][k-1]+s[i-1][j-1][k-1];
//             }
//         }
//     }//printf(" s222=%ld \n",s[2][2][2]);
//     while(q--){
//         scanf("%ld %ld %ld\n",&q1,&q2,&q3);
//         q1=min(q1,(long)150);
//         q2=min(q2,(long)150);
//         q3=min(q3,(long)150);//printf("%ld %ld %ld\n",q1,q2,q3);
//         printf("%ld\n",s[q1+1][q2+1][q3+1]);
//     }
//     return 0;
// }
#include<bits/stdc++.h>
#define int long long
using namespace std;
int a[2000006];
int b[2000006];
int n;
void check(int k)
{
    if(k==1){
        cout<<1<<endl;
    }else{
        if(k%2){
            int f=1;
            for(int i=1+k;i<=n;i+=k){
                for(int j=i+1;j<=i+k-1;j++){
                    if(b[j]<0){
                        f=0;
                        break;
                    }
                }
                if(!f){
                    break;
                }
            }
            if(f){
                cout<<2<<endl;
            }else{
                cout<<1<<endl;
            }
        }else{
            int h=k;
            int f=1;
            for(int i=1+k;i<=n;i+=k){
                for(int j=i+1;j<=i+k-1;j++){
                    if(b[j]<0){
                        f=0;
                        break;
                    }
                }
            }
            if(f){
                int ans=0;
                while(h%2==0){
                    ans++;
                    h/=2;
                }
                ans++;
                cout<<ans<<endl;
            }else{
                check(k/2);
            }
        }
    }
}
signed main()
{
    int T;
    cin>>T;
    while(T--){
        int q;
        cin>>n>>q;
        for(int i=1;i<=n;i++){
            cin>>a[i];
            b[i]=a[i]-a[i-1];
        }
        int k;
        for(int i=1;i<=n;i++){
            if(b[i]<0){
                k=i;
                break;
            }
        }
        k--;
        check(k);
        while(q--){
            int p,v;
            cin>>p>>v;
            b[p]=v-a[p-1];
            b[p+1]=a[p+1]-v;
            for(int i=1;i<=n;i++){
                if(b[i]<0){
                    k=i;
                    break;
                }
            }
            k--;
            check(k);
        }
    }
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 1ms
memory: 5676kb

input:

1
5 2
4 3 2 6 1
2 5
3 5

output:

1
2
3

result:

ok 3 lines

Test #2:

score: -100
Wrong Answer
time: 1ms
memory: 5612kb

input:

1
1 1
2000000000
1 1999999999

output:

2
2

result:

wrong answer 1st lines differ - expected: '1', found: '2'