怎么说呢,作为一个才学几个月的新手OIer去考noip,能拿到160这个分数还是将就能看吧(别说了,弱省OI没人权)。
下来看了一下这些题,果然还是做不来啊哈哈哈(= 。=)。。。
话不多说直接上题:
D1T1
小学奥数,小学奥数,小学奥数,重要的事情说三遍!!!对没错这是一道令人窒息的小学奥数题,一开始我就看到了其中有一个谜一般的规律,但是我想了想,不对啊这第一题没这么水吧???结果事实上是我看了一个多小时未果直接把我的公式套上去了,结果就ac了???
exm???
D1T2
这是一道终极无敌大模拟,两个字:恶心。我后面的时间基本都奉献给了这道题,结果最后竟然没有编译过!!!?
结果。。。。时间不够,找不到错误,愉快的爆零。。。`
D1T3
没学过,不做评价。
D2T1
这道题就很神奇了,刚考的时候看了一下三道题,毅然决然的选择了第一题来写爆搜,于是竟然水到了60分???
不过下来再检查的时候也很神奇,第一个和第二个数据没过却把后面6个数据爆搜出来了,emmmmmmmmmmmm
关键是调试时有些数据没有进入我写的循环体里面进行搜索???
大概。。就是这个样子:
#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;
struct m{
int x;
int y;
int z;
}ball[1005];
int has[1005];
int t=0,n,h,r,flag;
int dist(int x,int y){
int s;
int x1=(ball[x].x-ball[y].x)*(ball[x].x-ball[y].x);
int y1=(ball[x].y-ball[y].y)*(ball[x].y-ball[y].y);
int z1=(ball[x].z-ball[y].z)*(ball[x].z-ball[y].z);
s=x1+y1+z1;
return s;
}
bool cop(const m &a,const m &b){
return a.z<b.z;
}
void dfs(int x){
if(flag==1) return;
if((h-ball[x].z)<=r)
{
printf("Yes\n");
flag=1;
return;
}
for(int i=1;i<=n;i++)
{
if(has[i]==0)
if(dist(i,x)<=2*r*2*r){
has[i]=1;
dfs(i);
}
}
has[x]=1;
}
int main()
{
freopen("cheese.in","r",stdin);
freopen("cheese.out","w",stdout);
scanf("%d",&t);
for(int i=1;i<=t;i++)
{
scanf("%d%d%d",&n,&h,&r);
for(int j=1;j<=n;j++)
scanf("%d%d%d",&ball[j].x,&ball[j].y,&ball[j].z);
sort(ball+1,ball+n+1,cop);
if(ball[1].z>r) {printf("No\n");continue;}
else if((h-ball[n].z)>r) {printf("No\n");continue;}
for(int i=1;i<=n/2;i++)
{
if(ball[i].z>r) break;
if(ball[i].z<=r)
dfs(i);
}
if(flag==0) printf("No\n");
flag=0;
for(int i=1;i<=1000;i++)
has[i]=0;
}
return 0;
}
所以我的代码到底发生了什么我也不是很清楚。。。
D2T2&D2T3
实在也是没学过不想多说。。。。
所以这次NOIP的经历可以总结成一句话
骗分过样例,暴力出奇迹!!!
(开玩笑的当然是认真学习多多刷题啦!)