【題目鏈結】:
【題意】
【題解】
考慮每乙個二進位制數的最高位->第i位;
肯定是1(這裡不討論0的情況)
然後對於其餘n-1個二進位制數;
如果它們在第i位和它一樣->也是1的話,那麼異或結果是0
那麼不管第i位後面的位怎麼變;它肯定是變小的->我們要求的
如果它們在第i為和它不一樣->即為0,那麼異或結果是1;
則它肯定是變大了;
綜上 我們只要確定每個數的最高位所在的位置i
然後確定其他數字在第i位上是為1的數的個數cnt;
然後加上cnt就好;
【number ofwa】
0 【完整**】
#include
using
namespace
std;
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define ll long long
#define rep1(i,a,b) for (int i = a;i <= b;i++)
#define rep2(i,a,b) for (int i = a;i >= b;i--)
#define mp make_pair
#define ps push_back
#define fi first
#define se second
#define rei(x) cin >> x
#define pri(x) cout << x
#define ms(x,y) memset(x,y,sizeof x)
typedef pair pii;
typedef pairpll;
const
int dx[9] = ;
const
int dy[9] = ;
const
double pi = acos(-1.0);
const
int n = 1e6+100;
int t,n,m,top[n],tot[n];
ll ans;
string s;
int main()}}
rep1(i,1,n)
ans+=tot[top[i]];
cout
<< ans << endl;
}//printf("\n%.2lf sec \n", (double)clock() / clocks_per_sec);
return
0;}
鄭輕邀請賽 D hipercijevi
題目鏈結 題意 題解 把那個管泛化成乙個點 然後把每乙個在管裡面的點都和它相連 然後從起點跑bfs就好 最後輸出dis n 2 因為是點的數目所以要加 然後每個點都要經過乙個泛化的點再到其他點 所以肯定邊的數目是偶數個 用了ios sync with stdio 0 之後puts不能用 number...
鄭輕邀請賽 2266 number 集合
給定n,問有多少數對 x,y滿足 x,y 1,n x y x,y 現的 0,9 的數碼種類相同輸入 乙個整數n n 107 輸出輸出乙個數即答案 樣例輸入 樣例輸出 提示 1,11 2,22 12,21 下面 感覺比較優了,但還是會超時,有新思路會再更新 include define ll long...
湘潭邀請賽A
哥德 猜想 任一大於2的偶數,都可表示成兩個素數之和。是世界上最著名的未解問題之一,但是下面的反哥德 猜想 任一大於11的奇數,都可表示成兩個合數之和。確很容易證明。定義反哥德 分拆數g n 表示將大於11的奇數n分解為兩個合數之和的方案數。再定義sg n sum 即所有不大於n的奇數的反哥德 分拆...