2021.08.11(分组背包+Codeforces Global Round 15)

------------恢复内容开始------------

 

 

B.Problem - B - Codeforces

代码:

#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);
    }
    }

}
View Code

注:先第一遍找到单向比较的,只要发现这个比另一个小就把当前值记为记录,然后去和后面的进行循环。最后找到这个值以后,还无法确定这个是最后的决策,需要再进行一边循环,确定这是不是最后的值

 

 

 

 

------------恢复内容结束------------

posted @ 2021-08-12 15:59  bonel  阅读(32)  评论(0)    收藏  举报