2021.08.11(分组背包+Codeforces Global Round 15)
------------恢复内容开始------------

代码:
#include<iostream> #include<algorithm> #include<cstring> #include<cstdio> #include<cmath> using namespace std; const int maxx=5e4+10; int a[maxx][6]; int main(){//连续替换 int t; scanf("%d",&t); while(t--){ int n; scanf("%d",&n); for(int i=1;i<=n;i++){ for(int j=1;j<=5;j++){ scanf("%d",&a[i][j]); } } int a1; a1=1; for(int i=2;i<=n;i++){//首先先选出一个单方面适应的,再循环一遍确定一下这个是不是真的可以 int s=0; if(a[i][1]>a[a1][1]){ s++; } if(a[i][2]>a[a1][2]){ s++; } if(a[i][3]>a[a1][3]){ s++; } if(a[i][4]>a[a1][4]){ s++; } if(a[i][5]>a[a1][5]){ s++; } if(s>=3){ continue; }else{ a1=i; } } // printf("选出的:%d\n",a1); int flag=0; for(int i=1;i<=n;i++){ int s=0; if(i==a1){ continue; } if(a[i][1]>a[a1][1]){ s++; } if(a[i][2]>a[a1][2]){ s++; } if(a[i][3]>a[a1][3]){ s++; } if(a[i][4]>a[a1][4]){ s++; } if(a[i][5]>a[a1][5]){ s++; } if(s<3){ /* printf("不满足的:%d\n",i); printf("\n");*/ flag++; break; } } if(flag==1){ printf("-1\n"); }else{ printf("%d\n",a1); } } }
注:先第一遍找到单向比较的,只要发现这个比另一个小就把当前值记为记录,然后去和后面的进行循环。最后找到这个值以后,还无法确定这个是最后的决策,需要再进行一边循环,确定这是不是最后的值
------------恢复内容结束------------

浙公网安备 33010602011771号