題目**:
題意:
給定一些數,可將區間 l ~r 中某些數的二進位制位的1的位置更換, 使得最終區間所有數異或和為0,求這樣的區間個數。
思路:
在那裡瞎dp了好久,wa的很徹底,借鑑了一下別人的思路。
區間合法的條件是:
這個區間1的個數為偶數,並且區間中二進位制位1最多的乙個數的二進位制個數小於等於和的一半。
我們發現乙個數至少可以增加乙個二進位制位,1e18,大約在2^61次方。那麼區間長度大於63時,一定可以把數字相互抵消成0,(即第二個條件一定滿足)。所以我們只需統計有多少個偶數區間即可。
對於區間長度小於63的,我們直接暴力列舉即可。
**如下:
#include #include #include #include #include #include #include #include using namespace std;
const int maxn = 3e5+100;
long long a[maxn];
long long get(long long n)
return num;
}long long numj[maxn];
long long numo[maxn];
long long all[maxn];
int main()
if(i>63)
numj[i] = numj[i-1] + (all[i]%2==1);
numo[i] = numo[i-1] + (all[i]%2==0);
}printf("%lld\n",ans);
return 0;
}
Codeforces 976E 題解報告
1 當把所有的倍數2 a都加到同一health上,health增加的最多 2 先計算每乙個creature的hp dmg,按該值對所有的creature排序 再求和,i include using namespace std const int n 200 1000 9 int hp n dmg n...
Codeforces 1270E 構造 數學
有 n 個二維平面上的點,每兩個點之間連一條線段,將這些點劃分為兩個非空的集合 a b 同乙個集合內的兩點之間線段用黃色標註,不同集合的兩點之間線段用藍色標註,使距離相同的線段顏色相同。先將所有點的座標以其中乙個點作為原點轉化一下,使其中必定有乙個點是 0,0 然後將所有點按奇偶分為四組 0代表偶數...
codeforces 731E 優先佇列 DP
題意 給出n個數字,a和b兩個人依次選中1 k k 2 把他們合併之後自己分數加上這些數的和。求兩個人在最右策略下a最多領先b多少。當數字只剩下乙個之後遊戲馬上結束。用 dp i 0 1 表示前i個數字被合併,現在是a b先手到最後遊戲結束最多領先多少。故a要最大化後繼狀態的值,b要最小化後繼狀態的...