BZOJ 4245: [ONTAK2015]OR-XOR|进制类|贪心
来源:互联网 发布:大道寺知世和知世公主 编辑:程序博客网 时间:2024/05/29 12:31
思路:见到二进制的题就想贪心,按位处理!
用了种合并的思想
如果最高位在分成m段及以上的情况下能为0,那么就让他为0
其实分成m段以上最高位能为0,那么分成m段最高位肯定能为0
然后就保证最高位为零的情况下,尽量分成更多的段,合并
然后以同样的思路处理下一位
#include<cstdio>#include<cstdlib>#include<cstring>#include<cmath>#include<queue>#include<set>#include<map>#include<vector>#include<algorithm>#include<iostream>#define ll long longusing namespace std;ll sc(){ll i=0; char c=getchar();while(c>'9'||c<'0') c=getchar();while(c>='0'&&c<='9') i=i*10+c-'0',c=getchar();return i;}ll a[505050],b[505050],ans;int last[505050];int n,m;int main(){n=sc(),m=sc();for(int i=1; i<=n; i++) a[i]=a[i-1]^sc();for(int i=62; i>=0; i--){if(a[n]&((ll)1<<i)) continue;int tot=0;for(int j=1; j<=n; j++) if((a[j]&((ll)1<<i))==0) tot++,last[tot]=j;if(tot<m) continue;for(int j=1; j<=tot; j++) a[j]=a[last[j]];//for(int j=1; j<=tot; j++) a[j]=b[j];n=tot; //n段合并为了tot段}for(int i=1; i<=n; i++) ans|=(a[i]^a[i-1]);cout << ans;return 0;}
0 0
- Qt 自定义ExpandableGroup
- 微信企业转账【完整DEMO代码】
- Andorid获取状态栏高度
- iOS 点击图片全屏 再次点击取消
- 15届本科生的帝都求职之路
- BZOJ 4245: [ONTAK2015]OR-XOR|进制类|贪心
- 修改iOS导航栏字体大小颜色self.navigationItem.title的颜色
- mybatis整合Spring的基本步骤
- Python 匿名函数lambda
- LeetCode OJ - Two Sum
- Error:Execution failed for task ':app:compileDebugNdk' 解决方法
- 5.4. Sets(集合)
- (java)Min Stack
- 芝麻拼房:用分享经济解决酒店“一房难求”