A
很簡單的一個模擬,只要前面的數字有兩個以上就能合成后面的,我們進行一遍合成看能不能出現2048就可以了。
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<iostream>
#include<cmath>
#include<climits>
#include<queue>
#include<vector>
#include<set>
#include<map>
using namespace std;typedef long long ll;
const int INF=0x3f3f3f3f;
const int MAXN=1e2+5;
int a[40];
int n;int deal(int x)
{int ret=0;while(x/2){ret++;x/=2;}return ret;
}int main()
{int T,tmp;scanf("%d",&T);while(T--){memset(a,0,sizeof(a));scanf("%d",&n);for(int i=0;i<n;i++){scanf("%d",&tmp);a[deal(tmp)]++;}for(int i=1;i<=11;i++){a[i]+=a[i-1]/2;}if(a[11]>0){printf("YES\n");}else{printf("NO\n");}}return 0;
}
B
要在棋盤上放上兩種馬,讓他們能夠相互攻擊的數目最大,問如何放。
當時做的時候想的是先DFS一遍,然后對剩下的再進行DFS,然后過了,就沒有多想。剛才發現只要錯開排列就可以。
#include<cstdio>#include<cstring>#include<cstdlib>#include<algorithm>#include<iostream>#include<cmath>#include<climits>#include<queue>#include<vector>#include<set>#include<map>using namespace std;typedef long long ll;const int INF=0x3f3f3f3f;const int MAXN=1e2+5;int mp[MAXN][MAXN];int n;const int drc[8][2]={1,2,1,-2,2,1,2,-1,-1,2,-1,-2,-2,1,-2,-1};void dfs(int x,int y,int cur){int u,v;if(mp[x][y]) return;int tmp=(cur==1)?2:1;mp[x][y]=tmp;for(int i=0;i<8;i++){u=x+drc[i][0]; v=y+drc[i][1];if(u<1||u>n || v<1||v>n) continue;dfs(u,v,tmp);}}int main(){while(~scanf("%d",&n)){memset(mp,0,sizeof(mp));for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){if(!mp[i][j]){dfs(i,j,2);}}}for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){printf("%c",mp[i][j]==1?'W':'B');}printf("\n");}}return 0;}
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<iostream>
#include<cmath>
#include<climits>
#include<queue>
#include<vector>
#include<set>
#include<map>
using namespace std;typedef long long ll;
const int INF=0x3f3f3f3f;
const int MAXN=105;int n;int main()
{int cmd=0;while(~scanf("%d",&n)){for(int i=0;i<n;i++){cmd=i%2;for(int j=0;j<n;j++){printf("%c",cmd==0?'W':'B');cmd=!cmd;}printf("\n");}}return 0;
}
C
首先我們分析最多能組多少對,最多能組肯定是所有的人每三個人一組,但是我們還有其他限制要求,如果滿足要求的人比最多能夠組成的隊還多顯然所有的隊都能組成。如果滿足要求的人沒有最多組成的隊的人數多就是滿足要求的組數。
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<iostream>
#include<cmath>
#include<climits>
#include<queue>
#include<vector>
#include<set>
#include<map>
using namespace std;typedef long long ll;
const int INF=0x3f3f3f3f;
const int MAXN=1e5+5;
int a,b,c,s;
int ans1,ans2;
int ans;int main()
{int T;scanf("%d",&T);while(T--){scanf("%d%d%d",&a,&b,&c);s=(a+b+c)/3;ans1=min(a,b);if(ans1>=s){ans=s;}else{ans=ans1;}printf("%d\n",ans);}return 0;
}