1. 程式人生 > 其它 >2021.08.11(分組揹包+Codeforces Global Round 15)

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

注:先第一遍找到單向比較的,只要發現這個比另一個小就把當前值記為記錄,然後去和後面的進行迴圈。最後找到這個值以後,還無法確定這個是最後的決策,需要再進行一邊迴圈,確定這是不是最後的值

------------恢復內容結束------------