K - Knockout Racing Gym - 100553K
问题
思路:用简单的结构题存起始位置与结束位置,以及t时间后的位置;简单地分为两种情况如下。
AC代码
#include <bits/stdc++.h>
using namespace std;
struct node
{
int a;
int b;
int k;
} x[1010];
int main()
{
freopen("knockout.in", "r", stdin);
freopen("knockout.out", "w", stdout);
int n,m,i,t,r,j,ans,d;
scanf("%d %d",&n,&m);
for(i=1; i<=n; i++)
scanf("%d%d",&x[i].a,&x[i].b);
while(m--)
{
scanf("%d %d %d",&r,&j,&t);
for(i=1; i<=n; i++)
{
if(t<=(x[i].b-x[i].a))//第一种情况
x[i].k=x[i].a+t;
else//分奇偶改进的方法的第二种情况
{
ans=t/(x[i].b-x[i].a);
d=t%(x[i].b-x[i].a);
if(ans%2==0)
x[i].k=x[i].a+d;
else
x[i].k=x[i].a+(x[i].b-x[i].a-d);//最开始出错的地方
}
}
int sum=0;
for(i=1; i<=n; i++)
{
if(x[i].k>=r&&x[i].k<=j)
sum++;
}
printf("%d\n",sum);
}
return 0;
}