A. Gennady and a Card Game
题目:
题意:
给出一个2位字符串,看看后面5个是否有一个与其至少一个字符相同。
代码如下:
#include <bits/stdc++.h>
using namespace std;
string b[8];
int main()
{
for (int i=0;i<6;i++)
cin>>b[i];
int flag=0;
for (int i=1;i<=5;i++)
{
for (int j=0;j<2;j++)
if(b[i][j]==b[0][j])
{
flag=1;
break;
}
}
if(flag)
{
printf("YES\n");
}
else
{
printf("NO\n");
}
return 0;
}
B. Petr and a Combination Lock
题目:
题意:
给出一组角度,求经过操作后是否可以回到原来位置,可以顺时针转也可以逆时针转。
思路:
因为只有两种情况,可以直接dfs搜索即可。
代码如下:
#include <bits/stdc++.h>
using namespace std;
int n,flag=0;
int a[20];
void dfs (int loc,int edg)
{
if(loc==n)
{
if((edg+360)%360==0)
flag=1;
return;
}
dfs(loc+1,edg-a[loc]);
dfs(loc+1,edg+a[loc]);
}
int main()
{
scanf("%d",&n);
for (int i=0;i<n;i++)
scanf("%d",&a[i]);
dfs(0,0);
if(flag)
{
printf("YES\n");
}
else
{
printf("NO\n");
}
return 0;
}
C. Yuhao and a Parenthesis
题目:
题意:
给出一些字符串,问两个一组,最多可以 拼成多少组可以化为空串的字符串。
思路:
记录下每个字符串净剩下的字符个数,只有字符串只有一种字符的才能被记录下来,然后找两种字符数目相同的其中的最小值,累加即可。
代码如下:
#include <bits/stdc++.h>
using namespace std;
const int maxn=5*1e5+5;
int n;
int num1[maxn],num2[maxn];
int main()
{
memset (num1,0,sizeof(num1));
memset (num2,0,sizeof(num2));
scanf("%d",&n);
if(n==1)
{
printf("0\n");
return 0;
}
for (int i=0;i<n;i++)
{
int numa=0,numb=0;
char str[maxn];
scanf("%s",str);
int len=strlen(str);
char S[maxn];
int loc=0;
for (int j=0;j<len;j++)
{
if(loc==0)
{
S[loc++]=str[j];
if(str[j]==')')
numa++;
}
else
{
if(S[loc-1]=='('&&str[j]==')')
loc--;
else
{
if(str[j]==')')
numa++;
S[loc++]=str[j];
}
}
if(S[loc-1]==')'&&numb)
break;
}
numb=loc-numa;
if(numa==0&&numb==0)
{
num1[0]++;
}
else if(numa==0&&numb)
{
num2[numb]++;
}
else if(numa&&numb==0)
{
num1[numa]++;
}
}
int ans=num1[0]/2;
for (int i=1;i<=maxn;i++)
ans+=min(num1[i],num2[i]);
printf("%d\n",ans);
return 0;
}