1 /* 2 题意:有若干个点在一个区间内来回移动,1m/s。 3 水题:n^2的复杂度能解决,注意时间可能大于一个周期,要取模 4 */ 5 #include <cstdio> 6 #include <algorithm> 7 #include <cstring> 8 #include <cmath> 9 using namespace std; 10 11 typedef long long ll; 12 const int MAXN = 1e3 + 10; 13 const int INF = 0x3f3f3f3f; 14 ll x[MAXN], y[MAXN]; 15 struct Question 16 { 17 ll x, y, t; 18 }q[MAXN]; 19 int ans[MAXN]; 20 21 int main(void) //Gym 100553K Knockout Racing 22 { 23 // freopen ("K.in", "r", stdin); 24 freopen ("knockout.in", "r", stdin); 25 freopen ("knockout.out", "w", stdout); 26 27 int n, m; 28 while (scanf ("%d%d", &n, &m) == 2) 29 { 30 for (int i=1; i<=n; ++i) scanf ("%I64d%I64d", &x[i], &y[i]); 31 for (int i=1; i<=m; ++i) scanf ("%I64d%I64d%I64d", &q[i].x, &q[i].y, &q[i].t); 32 for (int i=1; i<=m; ++i) 33 { 34 int cnt = 0; 35 for (int j=1; j<=n; ++j) 36 { 37 ll d = q[i].t % ((y[j] - x[j]) * 2); 38 ll pos = x[j]; 39 if (pos + d <= y[j]) pos += d; 40 else pos = y[j] - (d - (y[j] - x[j])); 41 if (q[i].x <= pos && pos <= q[i].y) cnt++; 42 } 43 ans[i] = cnt; 44 } 45 46 for (int i=1; i<=m; ++i) printf ("%d\n", ans[i]); 47 } 48 49 return 0; 50 }
时间: 2024-10-11 21:20:06