为何这段代码F(hard)能过 而E(easy)不能呢?
https://ac.nowcoder.com/acm/contest/82957/E
这段代码基于贪心,也不太会证明
#include<bits/stdc++.h> #define int long long #define endl '\n' #define x first #define y second #define de(a) #a << " = " << (a) #define all(x) x.begin()+1, x.end() using namespace std; typedef pair<int,int> PII; const int N=2e5+10,mod=1e9+7,inf=0x3f3f3f3f3f3f3f3f,P=131; const double eps=1e-8,pi=acos(-1.0); void solve(int T) { int n,k,ans=0; cin>>n>>k; vector<vector<int>>a(n+1,vector<int>(32)); vector<PII>b(n+1); for(int i=1;i<=n;i++)cin>>b[i].y>>b[i].x; sort(all(b),greater<PII>()); for(int i=1;i<=n;i++) { for(int j=0;j<=30;j++) { if(b[i].x>>j&1)a[i][j]=1; } } for(int j=30;j>=0;j--) { int x=(1<<30)-1,p=(1<<30)-1; for(int i=1;i<=n;i++) { if(a[i][j]==1) { x&=b[i].x,p&=b[i].y; if(p<=k)ans=max(x,ans); } } } cout<<ans<<endl; } signed main() { bool multitest=0; //cout<<setiosflags(ios::fixed),cout.precision(2); ios::sync_with_stdio(false),cin.tie(nullptr); int _t=1; if(multitest)cin>>_t; for(int i=1;i<=_t;i++) { solve(i); } return 0; }