码迷,mamicode.com
首页 > 其他好文 > 详细

Codeforces 492E Vanya and Field 规律题

时间:2014-12-02 15:17:59      阅读:160      评论:0      收藏:0      [点我收藏+]

标签:blog   http   io   ar   os   sp   for   on   2014   

题目链接:点击打开链接

给定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 规律题

标签:blog   http   io   ar   os   sp   for   on   2014   

原文地址:http://blog.csdn.net/qq574857122/article/details/41678353

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!