Codeforces Round #553 (Div. 2)
阿新 • • 發佈:2019-04-19
選擇 技術分享 sin syn clas esp 為什麽 異或 define
題目鏈接:
https://codeforces.com/contest/1151
A. Maxim and Biology
題解:
水題直接上代碼
代碼:
1 #include<bits/stdc++.h> 2 using namespace std; 3 int n,ans=123456789; 4 string ss,s="ACTG"; 5 6 int main() 7 { 8 #ifndef ONLINE_JUDGE 9 freopen("aa.in","r",stdin); 10 #endifView Code11 ios::sync_with_stdio(false); 12 cin>>n; 13 //for(int i=1;i<=n;i++) 14 cin>>ss; 15 for(int i=0;i<=n-4;i++) 16 { 17 int tp=0; 18 for(int j=i;j<=i+3;j++) 19 { 20 int x=fabs(ss[j]-s[j-i]); 21 tp+=min(x,26-x); 22 }23 ans=min(ans,tp); 24 } 25 cout<<ans; 26 }
B. Dima and a Bad XOR
題意:
給你一個n*m的矩陣,每一行選一個數,是他們的異或和大於0.
題解:
這題慘遭hack,其實不難,還是太菜了,分類討論能力不夠導致思維有些小混亂。
因為只需要大於零,我們可以枚舉每一位二進制位。
對於某一位某一行只有三種情況:
(1) 這一行每個數這一位都為1
(2)這一位都為0
(3)這一位既有0又有1
顯然如果某一行滿足(3),就一定有解(想一想為什麽),然後我們先假定所有滿足(3)的行都選擇放0。
如果沒有(3),則每一行這一位都是固定的,算一下等不等於1就行了。
代碼
1 #include<bits/stdc++.h> 2 using namespace std; 3 #define N 600 4 int n,m,ans=123456789; 5 int mp[N][N]; 6 int a[N][20],b[N][20]; 7 int flag[N],c[N]; 8 int main() 9 { 10 #ifndef ONLINE_JUDGE 11 freopen("aa.in","r",stdin); 12 #endif 13 ios::sync_with_stdio(false); 14 cin>>n>>m; 15 for(int i=1;i<=n;i++) 16 for(int j=1;j<=m;j++) 17 cin>>mp[i][j]; 18 for(int k=0;k<=9;k++) 19 { 20 for(int i=1;i<=n;i++) 21 { 22 for(int j=1;j<=m;j++) 23 { 24 25 if ((mp[i][j]>>k)&1) 26 a[i][k]=j;else b[i][k]=j; 27 } 28 if (a[i][k]>0&&b[i][k]>0)flag[k]=1; 29 if (a[i][k]>0&&b[i][k]==0)c[k]^=1; 30 } 31 } 32 for(int k=0;k<=9;k++) 33 { 34 if (flag[k]==1||c[k]==1) 35 { 36 cout<<"TAK"<<endl; 37 for(int i=1;i<=n;i++) 38 { 39 if (b[i][k]==0)cout<<a[i][k]<<" "; 40 if (a[i][k]==0)cout<<b[i][k]<<" "; 41 if (a[i][k]>0&&b[i][k]>0) 42 { 43 if (c[k]==0)cout<<a[i][k]<<" "; 44 if (c[k]==1)cout<<b[i][k]<<" "; 45 c[k]=1; 46 } 47 } 48 return 0; 49 } 50 } 51 cout<<"NIE"; 52 53 }View Code
Codeforces Round #553 (Div. 2)