关于这场比赛,就是我不想多说,一共就做了5个题,主要感觉这个比赛像我这种只会暴力的人是真的不合适啊参加(做了6道题至少5道题超时一开始),废话不都说:
题目描述:
C-迷宫_哈尔滨理工大学第12届程序设计竞赛(同步赛) (nowcoder.com)
题目分析:
- 这个题我先提供一个暴力的写法,用scanf,printf竟然不会超时,但是用cin,cout就会超时,不得不反思自己以后要用scanf,printf。
- 思路的话设一个二维数组a[3][N],然后当op==1时候,放入数组a里面 ,cnt++(计数器),然后当op==2的时候,我就去找每一条路步数最少的那一条,用ans不断更新最小值
代码如下:
#include <cmath>
#include <cstdio>
using namespace std;
const int N=1e5+5;
#define abs(x) ((x)<0?-(x):(x))//宏变量定义
int main()
{
int t;
scanf("%d",&t);
int n,m,h,q,op,x,y,z;
while(t--)
{
scanf("%d%d%d%d",&n,&m,&h,&q);
int cnt=0;
int a[3][N]={};
while(q--)
{
scanf("%d%d%d%d",&op,&x,&y,&z);
if(op==1)
{
a[0][cnt]=x,a[1][cnt]=y,a[2][cnt]=z;
cnt++;
}
else
{
int ans=1e5;
for(int i=0;i<cnt;++i)
{
int k=abs(a[0][i]-x)+abs(a[1][i]-y)+abs(a[2][i]-z);
if(ans>k)ans=k;
}
printf("%d\n",ans);
}
}
}
return 0;
}
这个题用cin正好卡在了2秒,而用scanf则不会超时,所以以后题目要十分注意这一点。