Educational Codeforces Round 99 B题题解
首先通读题目可知,如果只按第一种走法的话,所遍历的x的坐标值符合从一到n的前缀和数组,所以我们先定义一个前缀和数组sum[10000],我们可以发现以下规律:在第n步时选择第二种走法,那么后面的sum[ ]对应减少n+1。
如图:
所以我们输入一个要测试的数x,再将其与数组中的元素比较,找到sum[i]>=x,在定义一个数a=sum[i]-x,再对a进行分类讨论
1.如果a恰好等于零,显然在第i步走到x点。
2.如果a等于1,那么在下一步时退后一步即可,即i+1步。
3.如果a=n+1>2,如图推的规律,只需在第n步时退一步,即可保证在第i步走到x。
代码如下:
#include <stdio.h>
int main()
{
int sum[1000];
int i;
for(i=1;i<10000;i++)
{
sum[i]=sum[i-1]+i;
}
int n;
scanf("%d",&n);
while(n--)
{
int x;
scanf("%d",&x);
i=1;
while(sum[i]<x)
{
i++;
}
int a=sum[i]-x;
if(a==0||a!=1)printf("%d\n",i);
else{printf("%d\n",i+1);}
}
}