hdu 6129 Just do it 找規律
阿新 • • 發佈:2017-08-17
-- std div its 題解 turn 個數 using const
題意很好理解
問你一個數組 按照他的規則處理m次之後是什麽樣的
看到這道題我一開始也沒什麽思路
但是我列了五個數
把它們m≤4的都算出來之後發現
如果m把化成二進制的這一位是1
那麽所有相隔是這一位數大小的數都要異或起來
然後模擬就好了
(題解中給出了相應的推導證明)
1 #include<bits/stdc++.h> 2 #define cl(a,b) memset(a,b,sizeof(a)) 3 #define debug(a) cerr<<#a<<"=="<<a<<endl 4using namespace std; 5 typedef long long ll; 6 typedef pair<int,int> pii; 7 8 const int maxn=2e5+10; 9 10 int n,m; 11 int a[maxn]; 12 13 void solve() 14 { 15 int bits=1; 16 while(bits*2<=m) bits*=2; 17 while(m) 18 { 19 while(m>=bits) 20 {21 for(int i=bits; i<n; i++) a[i]^=a[i-bits]; 22 m-=bits; 23 } 24 bits/=2; 25 } 26 } 27 28 int main() 29 { 30 int T; 31 scanf("%d",&T); 32 while(T--) 33 { 34 scanf("%d%d",&n,&m); 35 for(int i=0; i<n; i++)36 { 37 scanf("%d",&a[i]); 38 } 39 solve(); 40 for(int i=0; i<n; i++) 41 { 42 printf("%d%c",a[i],i==n-1?‘\n‘:‘ ‘); 43 } 44 } 45 return 0; 46 }/* 47 48 2 49 1 1 50 1 51 3 3 52 1 2 3 53 54 */
hdu 6129 Just do it 找規律