A: http://codeforces.com/problemset/problem/519/A
水题没什么好说的。
#include <iostream>
#include <string.h>
#include <stdio.h>
#include <math.h>
#include <algorithm>
#include <queue>
#define inf 0x3f3f3f3f
using namespace std;
char ma[10][10];
int su,su2;
int main()
{
while(scanf("%s",ma[0])!=EOF)
{
su=0;
su2=0;
for(int i=1;i<8;i++)
scanf("%s",ma[i]);
for(int i=0;i<8;i++)
{
for(int j=0;j<8;j++)
{
if(ma[i][j]=='Q')
{
su+=9;
}
else if(ma[i][j]=='q')
{
su2+=9;
}
else if(ma[i][j]=='R')
{
su+=5;
}
else if(ma[i][j]=='r')
{
su2+=5;
}
else if(ma[i][j]=='B')
{
su+=3;
}
else if(ma[i][j]=='b')
{
su2+=3;
}
else if(ma[i][j]=='N')
{
su+=3;
}
else if(ma[i][j]=='n')
{
su2+=3;
}
else if(ma[i][j]=='P')
{
su+=1;
}
else if(ma[i][j]=='p')
{
su2+=1;
}
else if(ma[i][j]=='K')
{
su+=0;
}
else if(ma[i][j]=='k')
{
su2+=0;
}
}
}
if(su>su2)
printf("White\n");
else if(su==su2)
{
printf("Draw\n");
}
else printf("Black\n");
}
return 0;
}
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
- 15.
- 16.
- 17.
- 18.
- 19.
- 20.
- 21.
- 22.
- 23.
- 24.
- 25.
- 26.
- 27.
- 28.
- 29.
- 30.
- 31.
- 32.
- 33.
- 34.
- 35.
- 36.
- 37.
- 38.
- 39.
- 40.
- 41.
- 42.
- 43.
- 44.
- 45.
- 46.
- 47.
- 48.
- 49.
- 50.
- 51.
- 52.
- 53.
- 54.
- 55.
- 56.
- 57.
- 58.
- 59.
- 60.
- 61.
- 62.
- 63.
- 64.
- 65.
- 66.
- 67.
- 68.
- 69.
- 70.
- 71.
- 72.
- 73.
- 74.
- 75.
- 76.
- 77.
- 78.
- 79.
- 80.
- 81.
- 82.
B: http://codeforces.com/problemset/problem/519/B
水题,简单排序即可。
#include <iostream>
#include <algorithm>
#include <math.h>
#include <map>
#include <queue>
#include <stack>
#define inf 0x3f3f3f3f
#include <stdio.h>
#include <string.h>
typedef __int64 ll;
#define mod 10000007
using namespace std;
int n,a[100010],b[100010],c[100010],k;
ll sum;
int main()
{
while(scanf("%d",&n)!=EOF)
{
for(int i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
for(int i=0;i<n-1;i++)
{
scanf("%d",&b[i]);
}
b[n-1]=-1;
for(int i=0;i<n-2;i++)
{
scanf("%d",&c[i]);
}
c[n-1]=-2;
c[n-2]=-3;
sort(a,a+n);
sort(b,b+n-1);
sort(c,c+n-2);
for(int i=0;i<n;i++)
{
if(b[i]!=a[i])
{
printf("%d\n",a[i]);
break;
}
}
for(int i=0;i<n-1;i++)
{
if(c[i]!=b[i])
{
printf("%d\n",b[i]);
break;
}
}
}
return 0;
}
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
- 15.
- 16.
- 17.
- 18.
- 19.
- 20.
- 21.
- 22.
- 23.
- 24.
- 25.
- 26.
- 27.
- 28.
- 29.
- 30.
- 31.
- 32.
- 33.
- 34.
- 35.
- 36.
- 37.
- 38.
- 39.
- 40.
- 41.
- 42.
- 43.
- 44.
- 45.
- 46.
- 47.
- 48.
- 49.
- 50.
- 51.
- 52.
- 53.
- 54.
- 55.
C: http://codeforces.com/problemset/problem/519/C
给你n个老手,m的新手,有两种组队方式,一种是1个老手带两个新手,另外一种是2个老手带一个新手,求最多的组队对数。
我是暴力求的,记得还有一种方法,不会算了。
#include <iostream>
#include <algorithm>
#include <math.h>
#include <map>
#include <queue>
#include <stack>
#define inf 0x3f3f3f3f
#include <stdio.h>
#include <string.h>
typedef __int64 ll;
#define mod 10000007
using namespace std;
int n,m;
ll sum;
int main()
{
while(scanf("%d%d",&n,&m)!=EOF)
{
sum=0;
while(n>0&&m>0)
{
if(n>=m&&n>=2)
{
sum++;
n-=2;
m-=1;
}
else if(m>=2)
{
sum++;
n-=1;
m-=2;
}
else break;
}
printf("%I64d\n",sum);
}
return 0;
}
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
- 15.
- 16.
- 17.
- 18.
- 19.
- 20.
- 21.
- 22.
- 23.
- 24.
- 25.
- 26.
- 27.
- 28.
- 29.
- 30.
- 31.
- 32.
- 33.
- 34.
- 35.
- 36.
- 37.
- 38.
- 39.
D. A and B and Interesting Substrings
题意:在给的一个串,每个字母有固定的权值求满足如下条件的子串的数目
1 该子串的首字母和尾字母相同
2 该串除了首尾字母外,其他字母的权值和为0
思路:维护一个前缀和,用了26个hash分别记录了26种字母每个的前缀和,如果遇到了一个'a',就检查之前有几个和他的前缀和一样的'a',在和上加上去,并维护前缀和。
map真的是好牛逼,可惜比赛的时候没想到,希望以后会用吧!
#include <iostream>
#include <algorithm>
#include <math.h>
#include <map>
#include <queue>
#include <stack>
#define inf 0x3f3f3f3f
#include <stdio.h>
#include <string.h>
typedef __int64 ll;
#define mod 10000007
using namespace std;
int h[30];
char s[100010];
ll sum,cnt;
int main()
{
while(scanf("%d",&h[0])!=EOF)
{
cnt=0;
sum=0;
for(int i=1;i<26;i++)
{
scanf("%d",&h[i]);
}
scanf("%s",s);
int l=strlen(s);
map<ll,ll>q[30]; //map<ll,int>q[30];
for(int i=0;i<l;i++)
{
cnt+=q[s[i]-'a'][sum];
sum+=h[s[i]-'a'];
q[s[i]-'a'][sum]++;
}
printf("%I64d\n",cnt);
}
return 0;
}
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
- 15.
- 16.
- 17.
- 18.
- 19.
- 20.
- 21.
- 22.
- 23.
- 24.
- 25.
- 26.
- 27.
- 28.
- 29.
- 30.
- 31.
- 32.
- 33.
- 34.
- 35.
- 36.
- 37.
- 38.