为何这段代码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;
}

全部评论

相关推荐

07-18 18:09
门头沟学院 Java
点赞 评论 收藏
分享
07-07 17:06
已编辑
深圳技术大学 golang
点赞 评论 收藏
分享
07-07 12:25
门头沟学院 Java
程序员牛肉:你这个智邮公司做的就是那个乐山市税务系统的服务吗?
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务