您的位置:首页 > 其它

写在杭电热身赛2之后

2013-09-12 01:57 218 查看
  11点40左右感到新校,我们到的时候才几个人啊.

期间随便看了看网站,也就是苹果的发布会,等到12点开始做题了,不过队友还没有来啦,首先A了一道水水水题

A Computer Graphics Problem

[align=left]http://acm.hdu.edu.cn/contests/contest_showproblem.php?pid=1001&cid=483[/align]
[align=left]按格式输出不同的符号而已[/align]
[align=left]直接贴代码了[/align]

#include <iostream>
#include <cstdio>
using namespace std;

int main()
{
int n,x;
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d",&x);
x = x/10;
printf("Case #%d:\n",i);
printf("*------------*\n");
for(int j=10-x;j>0;j--)
printf("|............|\n");
for(int k=x;k>0;k--)
printf("|------------|\n");
printf("*------------*\n");
}
return 0;
}


The Number Off of FFF

做完这道呢,队友也都来了,就进入了正式的比赛节奏,我先准备做最后一道The Number Off of FFF,WA了很久不知道错在哪里

最后马骋A过了,看了下,基本思路一样啊

我为什么WA了啊,题目意思很简单啊,就是报数,后面一个跟着前面一个报数,每次加一,有且只有一个报错了

我用的数组存了,马骋用的直接用的两个int 保存前后的,时间也快多,开始没想到

先贴AC代码

#include<cstdio>
#include<cstring>
#include<string>
#include<iostream>
using namespace std;

int main()
{
int t;
cin>>t;
for(int i=1; i<=t; i++)
{
printf("Case #%d: ",i);
int n,a,b,j;
bool iff=0;
cin>>n>>a;
for(j=2; j<=n; j++)
{
cin>>b;
if(b!=a+1)
{
printf("%d\n",j);
iff=1;
break;
}
a=b;
}
for(; j<n; j++) scanf("%d",&a);
if(!iff) printf("1\n");
}
return 0;
}


然后是我的WA

#include <iostream>
#include <cstdio>
typedef long long ll;
using namespace std;

int  num[10005];
int main()
{
int t,n,x;
scanf("%d",&t);
for(int ii=1;ii<=t;ii++)
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d",&num[i]);
}
x=1;

for(int i=2;i<=n;i++)
{
if(num[i]!=num[i-1]+1)
{
x=i;
break;
}
}
printf("Case #%d: %d\n",ii,x);
}
return 0;
}


明天继续写,室友要碎觉了

有些东西不写下来就会忘记的

这道题目不会做,开始随便写了个暴力测试数据,发现一个规律,就是所有以0结尾的数x,从0到x各位上的数的和为10的倍数的数的数量为x/10-1

就是用这个规律,碰巧过了这一道题目,有人说可以用什么数位dp,表示实在不会的说

贴代码

#include <iostream>
#include <cstdio>
using namespace std;
long long c;

bool isGood(long long x)
{
long long count  = 0;
while(x!=0)
{
count += x % 10;
x=x/10;
}
if(count % 10 == 0)
return true;
return false;
}

long long NUM(long long a , long long b)
{
long long cc=0;
for(long long i = a; i<=b; i++)
{
if(isGood(i))
{
cc++;
}
}
return cc;
}
int main()
{
long long  t;
long long x,y;

scanf("%I64d",&t);
for(long long ii=1; ii<=t; ii++)
{
c=0;
scanf("%I64d %I64d",&x,&y);
long long xa = (x-1) / 10 * 10;
long long ya = y / 10 * 10;
long long aa = (x-1) /10 - 1 + NUM(xa,x-1);
long long bb = y/10 - 1 + NUM(ya,y);
c = bb - aa;

printf("Case #%I64d: %I64d\n",ii,c);
}
return 0;
}


Naive and Silly Muggles

这道题是最小包围圆,几何体,直接上模版

#include<stdio.h>
#include<math.h>
/*求三点的圆心和半径的函数*/
void sdi(double x1,double y1,double x2,double y2,double x3,double y3,double *x0,double *y0,double *r)
{
*x0=((y3-y1)*(y2*y2-y1*y1+x2*x2-x1*x1)+(y2-y1)*(y1* y1-y3*y3+x1*x1-x3*x3))/(2*(x2-x1)*(y3-y1)-2*(x3-x1)*(y2-y1));
*y0=((x3-x1)*(x2*x2-x1*x1+y2*y2-y1*y1)+(x2-x1)*(x1*x1-x3*x3+y1*y1-y3*y3))/(2*(y2-y1)*(x3-x1)-2*(y3-y1)*(x2-x1));
*r=sqrt((x1-*x0)*(x1-*x0)+(y1-*y0)*(y1-*y0));
}
/*求两点间的距离*/
void ldi(double x1,double y1,double x2,double y2,double *r)
{
*r=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
}
/*判断三点构成的圆是否包含其他的任意点*/
int bji(int n,double *x,double *y,double r)
{
int i;
for(i=1; i<=n; i++)
{
if(r<sqrt((x[0]-x[i])*(x[0]-x[i])+(y[0]-y[i])*(y[0]-y[i])))
return 0;
}
return 1;
}

int main()
{
int n,i,j,k,t;
double xx,yy;
double x[120],y[120],x0,y0,r,s;
scanf("%d",&t);
for(int ti = 1;ti<=t;ti++)
{
n=3;
/*输入所有点*/
for(i=1; i<=n; i++)
{
scanf("%lf %lf",&x[i],&y[i]);
}

r=0;
s=0;
x[0]=x[1];
y[0]=y[1];
/*先求出两点间的最长距离。以这两点的距离为直径画一个圆。*/
for(i=1; i<n; i++)
{
for(j=i+1; j<=n; j++)
{
ldi(x[i],y[i],x[j],y[j],&s);
if(s>r)
{
r=s;
x[0]=(x[i]+x[j])/2;
y[0]=(y[i]+y[j])/2;
}
}
}
/*如果包含了所有的点那么 就是所求的解*/
if(bji(n,x,y,r/2))
{
scanf("%lf %lf",&xx,&yy);
printf("Case #%d: ",ti);
double disss;
ldi(x[0],y[0],xx,yy,&disss);
if(disss <= r/2)
puts("Danger");
else
puts("Safe");
}
/*如果不包含所有的点那么 就是三点所确定的圆是我们所求的解*/
else
{
s=1000;
r=0;
for(i=1; i<=n-2; i++)
{
for(j=i+1; j<=n-1; j++)
{
for(k=j+1; k<=n; k++)
{
sdi(x[i],y[i],x[j],y[j],x[k],y[k],&x[0],&y[0],&r);
if(bji(n,x,y,r)&&r<s)
{
s=r;
x0=x[0];
y0=y[0];
}
}
}
}
scanf("%lf %lf",&xx,&yy);
printf("Case #%d: ",ti);
double disss;
ldi(x0,y0,xx,yy,&disss);
if(disss <= s)
puts("Danger");
else
puts("Safe");

}
}
return 0;
}


现场就做出来了4个题目,给上交的AK大神们跪了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: