社区讨论

只过了两个点

P1880[NOI1995] 石子合并参与者 6已保存回复 8

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
8 条
当前快照
1 份
快照标识符
@mi7yzp13
此快照首次捕获于
2025/11/21 05:55
4 个月前
此快照最后确认于
2025/11/21 05:55
4 个月前
查看原帖
各位神仙请看我的炒鸡长代码
CPP
#include <bits/stdc++.h>
using namespace std;
int n,sumn,sumx,man=0x3f3f3f3f,flag,fk;
int arr[120],brr[120];
int main()
{
    //freopen("pebble.in","r",stdin);
    //freopen("pebble.out","w",stdout);
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        cin>>arr[i];
        brr[i]=arr[i];
    }
    for(int i=n;i>1;i--)
    {
        for(int j=1;j<=i;j++)
        {
            if(man>arr[j])
            {
                man=arr[j];
                flag=j;
            }
        }
        man=0x3f3f3f3f;
        if(flag+1>i)
        {
            if(arr[flag-1]<=arr[1])
            {
                arr[flag]+=arr[flag-1];
                arr[flag-1]=0;
            }
            else if(arr[flag-1]>arr[1])
            {
                arr[flag]+=arr[1];
                arr[1]=0;
            }
            sumn+=arr[flag];
        }
        else if(flag==1)
        {
            if(arr[i]<=arr[flag+1])
            {
                arr[flag]+=arr[i];
                arr[i]=0;
            }
            else if(arr[i]>arr[flag+1])
            {
                arr[flag]+=arr[flag+1];
                arr[flag+1]=0;
            }
            sumn+=arr[flag];
        }
        else
        {
            if(arr[flag-1]<=arr[flag+1])
            {
                arr[flag]+=arr[flag-1];
                arr[flag-1]=0;
            }
            else if(arr[flag-1]>arr[flag+1])
            {
                arr[flag]+=arr[flag+1];
                arr[flag+1]=0;
            }
            sumn+=arr[flag];
        }
        for(int k=1;k<=n;k++)
        {
            if(arr[k]==0)
            {
                fk=k;
                break;
            }
        }
        for(int k=fk;k<=i;k++)
        {
            arr[k]=arr[k+1];
        }
    }
    man=-0x3f3f3f3f;
    for(int i=n;i>1;i--)
    {
        for(int j=1;j<=i;j++)
        {
            if(man<brr[j])
            {
                man=brr[j];
                flag=j;
            }
        }
        man=-0x3f3f3f3f;
        if(flag+1>i)
        {
            if(brr[flag-1]<=brr[1])
            {
                brr[flag]+=brr[1];
                brr[1]=0;
            }
            else if(brr[flag-1]>brr[1])
            {
                brr[flag]+=brr[flag-1];
                brr[flag-1]=0;
            }
            sumx+=brr[flag];
        }
        else if(flag==1)
        {
            if(brr[i]<=brr[flag+1])
            {
                brr[flag]+=brr[flag+1];
                brr[flag+1]=0;
            }
            else if(brr[i]>brr[flag+1])
            {
                brr[flag]+=brr[i];
                brr[i]=0;
            }
            sumx+=brr[flag];
        }
        else
        {
            if(brr[flag-1]<=brr[flag+1])
            {
                brr[flag]+=brr[flag+1];
                brr[flag+1]=0;
            }
            else if(brr[flag-1]>brr[flag+1])
            {
                brr[flag]+=brr[flag-1];
                brr[flag-1]=0;
            }
            sumx+=brr[flag];
        }
        for(int k=1;k<=n;k++)
        {
            if(brr[k]==0)
            {
                fk=k;
                break;
            }
        }
        for(int k=fk;k<=i;k++)
        {
            brr[k]=brr[k+1];
        }
    }
    cout<<sumn<<endl<<sumx;
    return 0;
}
没有过的一组测试数据:in:46 16 4 14 12 0 3 11 8 18 2 6 8 6 7 13 7 8 14 11 2 16 12 16 0 8 1 3 10 7 16 0 16 11 17 13 18 5 15 0 12 19 0 0 5 3 1 out:2087 10554

回复

8 条回复,欢迎继续交流。

正在加载回复...