踩不出足迹(牛客练习赛88 )
生活随笔
收集整理的這篇文章主要介紹了
踩不出足迹(牛客练习赛88 )
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
踩不出足跡(牛客練習賽88 )
題意:
長度為n的數組a,每個數是一個k位二進制
定義一下操作:
令第一次得到的結果為 a1a_1a1?。你需要從第二個數開始,每次可以選擇與上一次得到的結果異或或者同或起來。
問最大值是多少?
題集:
隊友盲猜結論正確,orz
考慮異或和同或的性質,異或和同或都是具有交換律的,可以任意調換順序。同或運算相當于和另一個數取反異或起來
所以有:a??b=?a?b,?a??b=a?ba?? b=?a? b,?a ??b=a?ba??b=?a?b,?a??b=a?b
也就是如果我們有若干同或操作,其實就是將這個數取反再異或。那就是若干個數取反后異或起來。根據上面寫的等式,兩個取反排在一起可以消除這兩個取反符號,那也就是最后有可能只剩一個取反,或者一個也沒有。又因為交換律,我們將取反符號轉移到最后一個數上。所以答案就是所有數異或和,或者前n-1個數異或,最后一個數同或
同或的操作就是與k位1異或,但是注意k<=64,如果直接1<<64再減1,ull也頂不住,可以通過1<<63+1<<63+1來實現
longlong范圍:[?263,263?1][-2^{63},2^{63}-1][?263,263?1]
ull范圍:[0,264?1][0,2^{64}-1][0,264?1]
代碼:
// Problem: 踩不出足跡 // Contest: NowCoder // URL: https://ac.nowcoder.com/acm/contest/11178/C // Memory Limit: 1048576 MB // Time Limit: 2000 ms // By Jozky#include <bits/stdc++.h> #include <unordered_map> #define debug(a, b) printf("%s = %d\n", a, b); using namespace std; typedef long long ll; typedef unsigned long long ull; typedef pair<int, int> PII; clock_t startTime, endTime; //Fe~Jozky const ll INF_ll= 1e18; const int INF_int= 0x3f3f3f3f; void read(){}; template <typename _Tp, typename... _Tps> void read(_Tp& x, _Tps&... Ar) {x= 0;char c= getchar();bool flag= 0;while (c < '0' || c > '9')flag|= (c == '-'), c= getchar();while (c >= '0' && c <= '9')x= (x << 3) + (x << 1) + (c ^ 48), c= getchar();if (flag)x= -x;read(Ar...); } template <typename T> inline void write(T x) {if (x < 0) {x= ~(x - 1);putchar('-');}if (x > 9)write(x / 10);putchar(x % 10 + '0'); } void rd_test() { #ifdef ONLINE_JUDGE #elsestartTime= clock();freopen("data.in", "r", stdin); #endif } void Time_test() { #ifdef ONLINE_JUDGE #elseendTime= clock();printf("\nRun Time:%lfs\n", (double)(endTime - startTime) / CLOCKS_PER_SEC); #endif } const int maxn= 1e6 + 9; ull a[maxn]; int main() {//rd_test();int n, k;cin >> n >> k;for (int i= 1; i <= n; i++) {cin >> a[i];}ull num= 0;for (int i= 1; i <= n; i++) {num= num ^ a[i];}// cout << num << endl;ull ans= max(num, ((num) ^ ((1ull << (k-1)) + ((1ull << (k-1))-1ull))));cout << ans;//Time_test(); }總結
以上是生活随笔為你收集整理的踩不出足迹(牛客练习赛88 )的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: P2000 拯救世界
- 下一篇: 安卓手机秤(安卓秤)