找规律,1和2时单独考虑
#include <iostream>
#include <stdio.h>
#include <algorithm>
#include <string.h>
using namespace std;
const int MAX = 100+10;
long long n, m, k, x, y, f, maxx, minx, ans, kk, xx, yy, ans1, ans2;
int main()
{
cin>>n>>m>>k>>x>>y;
if(n==1||n==2)
{
if(n==1)f = m;
else f = 2*m;
if(k%f)
{
minx = k/f;
maxx = k/f+1;
k%=f;
if(k>=(x-1)*m+y)ans = maxx;
else ans = minx;
}
else
{
minx=maxx=ans=k/f;
}
}
else
{
f = 2*(n-1)*m;
if(k%f==0)
{
maxx = 2*(k/f);
minx = k/f;
if(x==1||x==n)ans = minx;
else ans = maxx;
}
else
{
ans1 = k/f;
ans2 = 2*(k/f);
k%=f;
if(k<n*m)
{
if(x==1||x==n)ans = ans1;
else ans = ans2;
minx = ans1;
ans1++;
if(k>m)ans2++;
maxx = max(ans1 , ans2);
if(k%m)
{
xx = k/m+1;
yy = k%m;
}
else
{
xx = k/m;
yy = m;
}
if(x<xx||(x==xx&&y<=yy))ans++;
}
else if(k==n*m)
{
minx = ans1+1;
maxx = ans2+1;
if(x==1||x==n)ans = minx;
else ans = maxx;
}
else
{
ans1++;
ans2++;
minx=ans1;
maxx=ans2+1;
if(x==1||x==n)ans = ans1;
else ans = ans2;
if(x>1&&x<n)
{
int xx = 2*n-k/m;
int yy = k%m;
if(yy==0)yy = m;
xx--;
if(xx<x||(x==xx&&y<=yy))ans++;
}
}
}
}
cout<<maxx<<" "<<minx<<" "<<ans<<endl;
return 0;
}