日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

CodeForces - 1270C Make Good(思维+构造)

發布時間:2024/4/11 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 CodeForces - 1270C Make Good(思维+构造) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目鏈接:點擊查看

題目大意:給出一個由n個數字構成的數列,現在已知其累加和為sum,異或和為xor,現在允許我們向數列中添加0~3個數,以滿足sum=2*xor,構造出任意一種方案

題目分析:一開始我想分情況討論的,就是在求出sum和xor之后,討論一下其大小關系,如果sum小于2*xor的話,直接補齊兩個其差值的一半就好了,因為新補的兩個數對xor不做貢獻,而對sum的貢獻就是差值,可以滿足條件了,不過需要對奇偶討論一下,因為奇數的一半會出現小數,這個時候我們就可以用第三個數來補齊一下了,也就是先讓sum加一,再讓xor異或1,這個時候其差值就是偶數了,剩下的就是當sum大于2*xor的時候,這個時候我考慮到首先加上一個數,讓其回到第一種情況即可,不過這樣想下來構造所需要處理的細節就太多太多了。。很不可取,即使勉強寫出來了也耗費了不少時間,而且應該很難1A

這個時候我們就可以直接從公式出發,先將數字抽象出來,在輸入完成后我們只有sum和xor兩個數值,若想滿足sum=xor*2,因為不可控因素較多,我們不妨先把xor給消掉,也就是添加一個數,令其權值等于xor,這樣等式就變成了sum+xor=2*(xor^xor),也就是sum+xor=0,這有個什么好處呢,這個公式的等式右邊,也就是需要異或的地方變成了零,接下來我們無論添加的數為多少,會造成的貢獻就是等式兩邊都加上相同的數值,因為我們需要維持兩倍的關系,所以完全可以添加一個sum+xor,這樣等式兩邊就可以符合題意了

代碼:

#include<iostream> #include<cstdlib> #include<string> #include<cstring> #include<cstdio> #include<algorithm> #include<climits> #include<cmath> #include<cctype> #include<stack> #include<queue> #include<list> #include<vector> #include<set> #include<map> #include<sstream> using namespace std;typedef long long LL;const int inf=0x3f3f3f3f;const int N=1e5+100;int main() { // freopen("input.txt","r",stdin); // ios::sync_with_stdio(false);int w;cin>>w;while(w--){int n;scanf("%d",&n);LL sum=0,_xor=0;for(int i=1;i<=n;i++){LL num;scanf("%lld",&num);sum+=num;_xor^=num;}printf("2\n");printf("%lld %lld\n",_xor,_xor+sum);}return 0; }

?

總結

以上是生活随笔為你收集整理的CodeForces - 1270C Make Good(思维+构造)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。