求助,为何re了9个点
查看原帖
求助,为何re了9个点
448873
Pig_py楼主2022/1/15 09:55
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
int n,m,a[85][85],cnt=0,hdd[85],tll[85];
long long ans=0;
char ch;
void fnd(int u){
    int w;
    if((tll[u]-hdd[u])%2==0){
        w=(tll[u]-hdd[u])/2+hdd[u];
        for(register int q=hdd[u];q<=w;q++)
            if(a[u][q]!=a[u][(tll[u]+hdd[u]-a[u][q])]){
                if(a[u][q]>a[u][tll[u]+hdd[u]-a[u][q]])ch='t';
                else ch='h';
                return;
            }
    }
    else{
        w=(hdd[u]+tll[u])/2;
        for(register int q=hdd[u];q<=w;q++){
            if(a[u][q]!=a[u][hdd[u]+tll[u]-a[u][q]]){
                if(a[u][q]>a[u][tll[u]+hdd[u]-a[u][q]])ch='t';
                else ch='h';
                return;
            }
        }
    }
    ch='t';
    return;
}
signed main(){
    scanf("%d%d",&n,&m);
    memset(tll,m,sizeof(tll));
    memset(hdd,1,sizeof(hdd));
    for(register int i=1;i<=n;i++){
        for(register int j=1;j<=m;j++){
            scanf("%d",&a[i][j]);
        }
    }
    while(hdd[1]<tll[1]){
        cnt++;
        for(register int i=1;i<=n;i++){
            if(a[i][hdd[i]]!=a[i][tll[i]]){
                if(min(a[i][hdd[i]],a[i][tll[i]])==a[i][hdd[i]]){
                    ans+=(pow(2,cnt))*a[i][hdd[i]];
                    hdd[i]++;
                }    
                else{
                    ans+=(pow(2,cnt))*a[i][tll[i]];
                    tll[i]--;
                }
            }
            else{
                fnd(i);
                if(ch=='t'){
                    ans+=pow(2,cnt)*a[i][tll[i]];    
                    tll[i]--;
                }
                else if(ch=='h'){
                    ans+=pow(2,cnt)*a[i][hdd[i]];
                    hdd[i]++;
                }                
            }
        }
    }
    printf("%lld",ans);
}

可以帮着看一下吗

2022/1/15 09:55
加载中...