zoukankan      html  css  js  c++  java
  • CF1148F Foo Fighters

    题目链接

    题意分析

    位运算 我们一看就是要对于每一位考虑

    对于按位与 a&b 如果对于b的修改超过了a的最高位 那么对于a&b的结果不会有任何影响

    我们假设一开始s是0 每变动一位 ta与这一位是1的数的按位与的结果上1的个数的奇偶性就会发生改变

    奇偶性改变 对应的正负性也会改变

    我们从低位到高位讨论

    当修改这一位之后不会再产生影响 当且仅当这一位是这个数的最高位

    对于这样的数 我们将他们的权值和累加 如果>0 那么 取负之后对于答案有贡献 我们就把s的这一位置为1 否则为0

    为了操作简便 如果一开始的权值和是负数的话 就把每一个权值取负之后再操作、

    CODE:

    #include<bits/stdc++.h>
    #define N 300080
    using namespace std;
    int n;
    long long sum,ans;
    struct Node
    {
    	long long val,mask;
    	int high;
    }e[N];
    int main()
    {
    	scanf("%d",&n);
    	for(int i=1;i<=n;++i)
    	{
    		scanf("%lld%lld",&e[i].val,&e[i].mask);
    		sum+=e[i].val;
    	} 
    	for(int i=1;i<=n;++i)
    	{
    		for(int j=62;j>=0;--j)
    		if((1LL<<j)&e[i].mask) {e[i].high=j;break;}
    	}
    	if(sum<0)
    	{
    		for(int i=1;i<=n;++i) e[i].val=-e[i].val;
    	}
    	for(int j=0;j<=62;++j)
    	{
    		long long tmp=0;
    		for(int i=1;i<=n;++i)
    		if(e[i].high==j) tmp+=e[i].val;
    		if(tmp>0)
    		{
    			for(int i=1;i<=n;++i)
    			if((1LL<<j)&e[i].mask) e[i].val=-e[i].val;
    			ans+=(1LL<<j);
    		} 
    	}
    	printf("%lld\n",ans);
    	return 0;
    } 
    
  • 相关阅读:
    delphi Int64Rec 应用实例
    PerformEraseBackground 擦除背景(ThemeServices)
    Delphi 的 Bit
    delphi 关于 "高位" 与 "低位"
    PByte和PChar的关系
    执行控制台程序并且获得它的输出结果
    Console下Pause效果的函数
    ByteType字符串中判断是否英文
    窗体包括标题作为一个位图复制到剪贴板
    inf 启动
  • 原文地址:https://www.cnblogs.com/tcswuzb/p/14385764.html
Copyright © 2011-2022 走看看