微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

贪心相关

阿狸与桃子的游戏

史上最水黑题?

注意边权下放到点权的时候,不要/2.

输出答案时再/2,以免整数除法带来错误(第一次就是因为这个wa了23333333

分享图片

 1 #include<bits/stdc++.h>
 2 #define LL long long
 3 #define maxn 10000+5
 4 #define re register int 
 5 using namespace std;
 6 LL sum;
 7 int dian[maxn];
 8 int n,m;
 9 int main()
10 {
11     ios::sync_with_stdio(false);
12     cin>>n>>m;
13     for(re i=1;i<=n;i++)
14     cin>>dian[i],dian[i]*=2;
15     for(re i=1;i<=m;i++)
16     {
17         int u,v,w;
18         cin>>u>>v>>w;
19         dian[u]+=w;
20         dian[v]+=w;
21     }
22     sort(dian+1,dian+n+1);
23     for(re i=1;i<=n;i+=2)
24     sum+=(dian[n-i+1]-dian[n-i]);
25     cout<<sum/2;
26     return 0;
27  } 
阿狸与桃子的游戏

起床困难综合症

比较重要的性质是全0和全1穿过门后能表示出所有的情况(显然?)

然后拆位贪心就可以了

分享图片

 1 #include<bits/stdc++.h>
 2 #define re register int
 3 using namespace std;
 4 int n,m,t;
 5 char ch[5];
 6 int tmp1,tmp2=-1;
 7 int ans; 
 8 int main()
 9 {
10     cin>>n>>m;
11     for(re i=1;i<=n;i++)
12     {
13         scanf("%s",ch);
14         cin>>t;
15         if(ch[0]==A) tmp1&=t,tmp2&=t;
16         if(ch[0]==O) tmp1|=t,tmp2|=t;
17         if(ch[0]==X) tmp1^=t,tmp2^=t;
18     }
19     for(re i=29;i>=0;i--)
20     {
21         if((tmp1>>i)&1) ans+=(1<<i);
22         else if(((tmp2>>i)&1)&&(1<<i)<=m)
23         ans+=(1<<i),m-=(1<<i);
24     }
25     cout<<ans;
26     return 0;
27 } 
起床困难综合症

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐