Http://codeforces.com/problemset/problem/758/C
Test instructions: There are n rows of m in the classroom, and the teacher calls from the first row to the next point, until the point to the first row of M row, from the first row of the second column starting point, when the name of the nth column, then click the name of the N-1 column. And so on, from the column: 1,2,3,4,......,n,n-1,n-2,......,1, 2, .... In this order roll-call. The teacher in the Class A total of K, ask the class can point to the same number of students how many times, at least can point the same number of classmates, point the location for (x, y) students how many times name.
Idea: It's a bit metrorrhagia to meet this problem. Convinced that it is a formula can be made out of the topic, and then wrote a page of grass paper, even the sample is not enough, at a loss. After the game want to look at other people's formula, the results have been seen through the calculation + simulation. Since the use of computer, in accordance with the time complexity of the case with simulation help calculation, as if there is no problem ah. (Why am I directly convinced that I'm going to push the formula, and it doesn't seem like the first time I've made such a mistake?)
First of all to pay attention to the column order, as if a lot of people did not read the topic (even if I understand the egg), assuming that N is 4, then the order is 1,2,3,4,3,2,1,2,3, .... So, a period from the column is (n+n-2), because when n = 1, this is equal to 0, so the case of n = 1 is a special sentence. If n = 1, then each time is a point this row, the most people are forget k/m times, the remainder with k% m from the first row to simulate plus, until the remainder becomes 0. If n > 1, then the number of the 1th and nth columns per periodic point is only once, and the number of points 2~n-1 is two times, then the number of cycles that can be ordered = k/m/(n+n-2), then the remainder is simulated with K (M * (n+n-2)). Since the initial start is from the first column, it starts from the first column.
1#include <cstdio>2#include <algorithm>3#include <iostream>4#include <cstring>5#include <string>6#include <cmath>7#include <queue>8#include <vector>9#include <map>Ten#include <Set> One#include <stack> A using namespacestd; - #defineINF 0x3f3f3f3f - #defineN 100010 thetypedefLong LongLL; -LL mp[ the][ the]; - - intMain () { + intx, y, N, M; - LL K; +CIN >> n >> m >> k >> x >>y; ALL mi =-1, MA =-1; at if(n = =1) { -LL Yu = k%m; -LL cnt = k/m; - for(inti =1; I <= m; i++) mp[1][i] + =CNT; - for(inti =1; I <= m; i++) - if(Yu) mp[1][i]++, yu--; in}Else { -LL num = (n + N-2) *m; toLL cnt = k/num;//Number of Cycles +LL Yu = k%num; - for(inti =1; I <= N; i++) the for(intj =1; J <= M; J + +) * if(i = =1|| i = = N) mp[i][j] + =CNT; $ ElseMP[I][J] + = CNT *2;Panax Notoginseng for(inti =1; I <= N; i++) - for(intj =1; J <= M; J + +) the if(Yu) mp[i][j]++, yu--; + for(inti = n-1; I >=1; i--) A for(intj =1; J <= M; J + +) the if(Yu) mp[i][j]++, yu--; + } - for(inti =1; I <= N; i++) { $ for(intj =1; J <= M; J + +) { $ if(Ma < mp[i][j]) Ma =Mp[i][j]; - if(Mi = =-1|| Mi > mp[i][j]) mi =Mp[i][j]; - } the } -printf"%i64d%i64d%i64d\n", MA, MI, mp[x][y]);Wuyi return 0; the}
Codeforces 758c:unfair Poll (thinking + Simulation)