这一场的还是在拼手速=——=
第一次上1600呢 纪念一下~
A. Choosing Teams
http://codeforces.com/contest/432/problem/A
刷榜题 统计小于等于5-k的人数的个数 结果除以3
#include<cstdio>
#include <cstring>
#include <cmath>
using namespace std;
int i,o,p,j,k,l,n,m,a[100000],b[100000],ans;
int main()
{
scanf("%d%d",&n,&k);
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
for (i=1;i<=n;i++)
{
scanf("%d",&a[i]);
++b[a[i]];
}
ans=0;
for (i=0;i<=5-k;i++)
ans+=b[i];
printf("%d",ans/3);
return 0;
}
B. Football Kit
http://codeforces.com/contest/432/problem/A
刷榜题 统计客场球衣别人主场球衣重复的次数,加到主场球衣次数中
#include<cstdio>
#include <cstring>
#include <cmath>
using namespace std;
int i,o,p,j,k,l,n,m,a[100005],b[100005],d[100005],e[100005],c[100005],ans;
int main()
{
scanf("%d",&n);
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
memset(c,0,sizeof(c));
memset(d,0,sizeof(d));
memset(e,0,sizeof(e));
for (i=1;i<=n;i++)
{
scanf("%d",&a[i]);
scanf("%d",&b[i]);
}
for (i=1;i<=n;i++)
{
++c[a[i]];
}
for (i=1;i<=n;i++)
{
d[i]=n-1;
d[i]+=c[b[i]];
e[i]+=n-1-c[b[i]];
}
for (i=1;i<=n;i++)
{
printf("%d %d\n",d[i],e[i]);
}
return 0;
}
C. Prime Swaps
http://codeforces.com/contest/432/problem/C
贪心,每次统计距离目标最近的素数。
#include<cstdio>
#include <cstring>
#include <cmath>
using namespace std;
int i,o,p,j,k,l,n,m,a[100100],b[100100],d[100100],s[1000100][3],c[100100],ans;
void swapi(int x,int y)
{
int t1,t2;
t1=x;
t2=y;
d[b[x]]=t2;
d[b[y]]=t1;
m=b[x];
b[x]=b[y];
b[y]=m;
}
int main()
{
memset(a,0,sizeof(a));
p=o=0;
a[1]=1;
for (i=2;i<=100100;i++)
if (!a[i])
{
b[++o]=i;
for (j=2*i;j<=100100;j+=i)
a[j]=1;
}
scanf("%d",&n);
o=1;
a[1]=1;
for (i=1;i<=100100;i++)
{
if (i>=(b[o+1]-1)) o++;
a[i]=b[o]-1;
}
for (i=1;i<=n;i++)
{
scanf("%d",&b[i]);
//b[i]=n+1-i;
d[b[i]]=i;
}
for (i=1;i<=n;i++)
{
k=d[i];
while (k-i)
{
ans++;
s[ans][1]=k-a[k-i];
s[ans][2]=k;
swapi(s[ans][1],s[ans][2]);
k-=a[k-i];
}
}
printf("%d\n",ans);
for (i=1;i<=ans;i++)
printf("%d %d\n",s[i][1],s[i][2]);
return 0;
}
D题暂时空,后缀数组还需掌握
E. Square Tiling
http://codeforces.com/contest/432/problem/E
比赛的时候没出这道题,贪心的方式错了,每次往外再染色一层点都要看是不是存在字典学更小的方案。
http://codeforces.com/contest/432/submission/6630816 WA在第六组
AC代码
#include <cstdio>
#include <cmath>
#include <cstring>
#include <cstdlib>
char a[105][105],b[305];
char backu(int x,int y,int h,char p)
{
char tmp;
int i,j;
for (tmp='A';tmp<='Z';tmp++)
b[tmp]=0;
b[p]=1;
for (i=x;i<=x+h-1;i++)
b[a[i][y-1]]=1;
for (i=x;i<=x+h-1;i++)
b[a[i][y+h]]=1;
for (j=y;j<=y+h-1;j++)
b[a[x-1][j]]=1;
for (tmp='A';tmp<='Z';tmp++)
if (b[tmp]==0)return tmp;
}
int main()
{
int i,n,t,m,j,k,ii,jj;
char h;
scanf("%d%d",&n,&m);
for (i=0;i<=n+1;i++)
for (j=0;j<=m+1;j++)
a[i][j]='A'-1;
for (i=1;i<=n;i++)
for (j=1;j<=m;j++)
if (a[i][j]=='A'-1)
{
for (k=1;(i+k-1<=n&&j+k-1<=m&&a[i+k-1][j]=='@'&&a[i][j+k-1]=='@');k++)
{h=backu(i,j,k,'@');
if (h>backu(i,j+k-1,1,h)) break;}
k-=1;
h=backu(i,j,k,'@');
for (ii=i;ii<=i+k-1;ii++)
for (jj=j;jj<=j+k-1;jj++)
a[ii][jj]=h;
// printf("%d %d %d %c\n",i,j,k,h);
}
for (i=1;i<=n;i++){
for (j=1;j<=m;j++)
printf("%c",a[i][j]);
printf("\n");}
return 0;
}