第二次比賽部分題題解

2022-07-22 06:36:12 字數 1311 閱讀 5951

關於異或運算,你需要挖掘它的性質,否則這個題找不到規律是沒辦法做出來的。

$a_l\oplus a_ \cdots \oplus a_ = a_\oplus \cdots \oplus a_r $

則可以推出\(a_l\oplus a_ \cdots \oplus a_ \oplus a_\oplus \cdots \oplus a_r = 0\)

又因為對於任意乙個正整數 x 都有\(x \oplus 0 = x\) 。所以這個題就可以冒險試一試了。

#include using namespace std;

int n;

long long has[(1<<20)+10][2];//has[x][0]表示x在偶數字出現的次數

int main()

cout《但是可以稍微證明一下,為什麼一段數字的異或為0,然後它們對半分就一定相等呢?

因為如果異或為0,那麼這一段數字二進位制表示上,每一位上面的1的個數和都為偶數個,那麼我們把這段數字對半分後,這些偶數個1的拆分只能有兩種情況,都為偶數,都為奇數。可見分開後的二進位制位上的1的個數的奇偶性相同,即異或的結果是相同的。

首先可以想到的是,如果字串中所有的字元都相同,或者只有乙個不同,那麼這個回文串是無法重構成與原串不同的回文串的。

然後我們分情況討論:

#include using namespace std;

bool ispalindrome(const string& s)

return true;

}bool solve1(string s)

}return false;

}//判斷是否存在多個不同字元

bool anyanswer(const string& s)

return nt > 1;

}int main() else

return 0;

}

結合著cf題解看吧,鄙人能力有限

#include using namespace std;

typedef long long ll;

ll x1,y1,x2,y2,n;

char s[100010];

ll prex[100010],prey[100010];

bool check(ll m)

int main()

ll l = 0,r = 1e18;

int flag = 0;

while(lelse l = mid+1;

}if(flag)

cout

第二次周賽題解

e題,不懂的看新生訓練題解 includeint main return 0 d題,乙個預處理就ok includeint a 1000005 int main int t scanf d t while t return 0 c題,打表找下規律,會發現是以1 1 2 0 2 2 1 0為迴圈 in...

第二次周賽題解

位址 a 組成三位數 列舉第乙個數,第二個數第三個數根據關係算出來,然後判斷是否合法就行了。include define rep i,a,b for int i a i b i using namespace std int vis 10 bool fun int n return true boo...

第二次作業

execise02 1.查詢85年以後出生的學生姓名 性別和出生日期 2.列表顯示所有可能的學生選課組合 學號 課程號 3.查詢1 2 4班中陳姓同學的資訊 4.查詢所有及格的學生姓名 所選課程名及所得分數 5.統計各門課程的及格人數 課程編號 課程名 及格人數 6.統計各門課程的總人數 及格人數和...