首页 > 代码库 > Codeforces 492E Vanya and Field 规律题
Codeforces 492E Vanya and Field 规律题
题目链接:点击打开链接
给定n*n的矩阵(0,0)->(n-1, n-1) m个苹果(下面m行给出苹果坐标)(dx, dy) 向量。
任选一个起点,用这个向量在矩阵里跑,问最多能采摘多少个苹果(坐标是%n, 即超过矩阵时 (x%n, y%n))
输出起点。
思路:
把向量所在的点集写出来会发现一个起点一定经过了n个点,即至多只有n种起点
所以把点分成n个组即可。
#pragma comment(linker, "/STACK:1024000000,1024000000") #include <cstdio> #include <cstring> #include <algorithm> #include <iostream> #include <map> template <class T> inline bool rd(T &ret) { char c; int sgn; if (c = getchar(), c == EOF) return 0; while (c != '-' && (c<'0' || c>'9')) c = getchar(); sgn = (c == '-') ? -1 : 1; ret = (c == '-') ? 0 : (c - '0'); while (c = getchar(), c >= '0'&&c <= '9') ret = ret * 10 + (c - '0'); ret *= sgn; return 1; } template <class T> inline void pt(T x) { if (x <0) { putchar('-'); x = -x; } if (x>9) pt(x / 10); putchar(x % 10 + '0'); } using namespace std; const int N = 1000050; const double eps = 1e-9; typedef long long ll; int a[N], b[N]; int n, m, dx, dy; int main(){ while(cin>>n>>m>>dx>>dy){ memset(b, 0, sizeof b); int x = 0, y = 0; for(int i = 0; i < n; i++){ a[x] = y; x = (x+dx)%n; y = (y+dy)%n; } for(int i = 1; i <= m; i++){ rd(x); rd(y); y = (y-a[x]+n)%n; b[y]++; } int ans = 0; for(int i = 0; i < n; i++) if(b[i]>b[ans]) ans = i; printf("%d %d\n", 0, ans); } return 0; }
Codeforces 492E Vanya and Field 规律题
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。