先总结一下:这场比赛,大家基本上都在火车上,效率相对较低。G是在最后半小时内写过的,算是一个提醒吧。不到最后一刻不要放弃!
G - Dancing Stars on Me
求出这个多边形的重心,然后计算该点到每个顶点的距离是否相等。求重心就是把各个点坐标求平均值。
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
using namespace std;
const int maxn=5000;
int t;
int x[maxn];
int y[maxn];
int main()
{
scanf("%d",&t);
for(int i=1;i<=t;i++)
{
int n; bool ys=1;
if(n==2) {
printf("NO\n");continue;}
scanf("%d",&n); double xp=0; double yp=0;
for(int j=1;j<=n;j++)
{
scanf("%d%d",&x[j],&y[j]);
xp+=x[j]; yp+=y[j];
}
double xc=xp/n;
double yc=yp/n; double r=(xc-x[1])*(xc-x[1])+(yc-y[1])*(yc-y[1]); // cout<<"r="<<r<<endl;
for(int j=2;j<=n;j++)
{
double now=(xc-x[j])*(xc-x[j])+(yc-y[j])*(yc-y[j]);
double c=now-r; if(c<0) c=0-c;
if(c>0.1) ys=0;
//printf("%lf %lf\n",now,r);
}
if(ys) printf("YES\n");
else printf("NO\n");
}
return 0;
}
L - House Building
签到题,不多说了,直接放代码
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<string>
using namespace std;
const int maxn=60;
int hi[maxn][maxn];
int t;
int ans=0;
int main()
{
scanf("%d",&t);
for(int i=1;i<=t;i++)
{
int n; int m; scanf("%d%d",&n,&m); ans=0;
memset(hi,0,sizeof(hi));
for(int j=2;j<=n+1;j++)
for(int k=2;k<=m+1;k++)
{
scanf("%d",&hi[j][k]);
}
for(int j=2;j<=n+1;j++)
for(int k=2;k<=m+1;k++)
{
if(!hi[j][k]) continue;
if(hi[j][k]>hi[j+1][k]) ans+=(hi[j][k]-hi[j+1][k]);
if(hi[j][k]>hi[j-1][k]) ans+=(hi[j][k]-hi[j-1][k]);
if(hi[j][k]>hi[j][k+1]) ans+=(hi[j][k]-hi[j][k+1]);
if(hi[j][k]>hi[j][k-1]) ans+=(hi[j][k]-hi[j][k-1]);
ans++;
}
printf("%d\n",ans);
}
return 0;
}