D. Minimax Problem 題解(思維+二分)
阿新 • • 發佈:2021-09-27
題目連結
題目思路
算是一個套路題
就是二分,然後大於等於他為1,小於等於他為0
然後判斷是否有兩個集合的或為全集
程式碼
不擺爛了,寫題#include<bits/stdc++.h> #define fi first #define se second #define debug cout<<"I AM HERE"<<endl; using namespace std; typedef long long ll; const int maxn=3e5+5,inf=0x3f3f3f3f,mod=1e9+7; const double eps=1e-6; int n,m; int a[maxn][10]; int vis[1000]; pair<int,int> pr; bool check(int x){ for(int i=0;i<(1<<m);i++){ vis[i]=0; } for(int i=1;i<=n;i++){ int sta=0; for(int j=1;j<=m;j++){ if(a[i][j]>=x){ sta+=(1<<(j-1)); } } vis[sta]=i; } for(int i=0;i<(1<<m);i++){ if(vis[i]==0) continue; for(int j=0;j<(1<<m);j++){ if(vis[j]==0) continue; if((i|j)!=(1<<m)-1) continue; pr={vis[i],vis[j]}; return true; } } return false; } signed main(){ cin>>n>>m; for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ cin>>a[i][j]; } } int l=0,r=1e9,ans=-1; while(l<=r){ int mid=(l+r)/2; if(check(mid)){ ans=mid; l=mid+1; }else{ r=mid-1; } } cout<<pr.fi<<" "<<pr.se<<'\n'; return 0; }