做这道题目的时候,我只顾着分类讨论了,可想而知,分类思想是对的,但是分支太多,极容易出错,又因为此题的数据量小,故可以通过暴力得到每一个点的次数。
在这里,周期T等于1->n->2的循环,最后,比较大小即可得到答案。
以后,碰到这种要分很多情况讨论的问题,先要找出规律,不能直接代码,否则事倍功半。
#include <bits/stdc++.h>
#define MAXN 1000000000000000000 + 20
using namespace std;
typedef long long ll;
int n,m,x,y,x2,y2;
ll k,maxn,minn,t;
ll a[120][120];
int main()
{
minn = MAXN,maxn = 0;
memset(a,0,sizeof(a));
cin >> n >> m >> k >> x >> y;
ll p,q;
if(n == 1){
p = (ll)k/m;
q = (ll)k%m;
for(int i = 1;i <= n;++ i){
for(int j = 1;j <= m;++ j){
a[i][j] += p;
if(q)
q--,a[i][j]++;
}
}
}
else{
p = (ll)k/(m*(2*n-2));
q = (ll)k%(m*(2*n-2));
for(int i = 1;i <= n;++ i){
for(int j = 1;j <= m;++ j){
a[i][j] += p;
if(q)
q--,a[i][j]++;
}
}
for(int i = n-1;i >= 2;-- i){
for(int j = 1;j <= m;++ j){
a[i][j] += p;
if(q)
q--,a[i][j]++;
}
}
}
for(int i = 1;i <= n;++ i)
for(int j = 1;j <= m;++ j){
maxn = max(maxn,a[i][j]);
minn = min(minn,a[i][j]);
}
cout << maxn << ' ' << minn << ' ' << a[x][y] << endl;
}