标签:[1] rod ssi mat ace 次数 cstring std pre
一个矩形方格,从前到后,再从后到前数k次,问每个方格最多/最少经过多少次,(x,y)方格上经过多少次
遍历是有周期的,一个周期经过2(n-1)m个方格,当n=1时,周期为m
先求出周期,再求出剩下的次数,然后将剩下的次数,通过遍历分配到每一个方格上
o(1)解决问题比较困难的时候,可以向o(n)求助
http://codeforces.com/blog/entry/49880
http://codeforces.com/problemset/submission/758/47274112
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<string>
#include<vector>
#include<cmath>
#include<map>
#include<istream>
#include<cassert>
#include<set>
#define DEBUG(x) cout<<#x<<" = "<<x<<endl
using namespace std;
typedef long long ll;
int main()
{
// freopen("in.txt","r",stdin);
ll n, m, k, x,y;
cin>>n>>m>>k>>x>>y;
ll trn;
trn=n==1?m:2*(n-1)*m;
ll mmx,mmn,srg;
ll tms=k/trn;
ll lft=k%trn;
ll cnt[110][110];
for(int ii=1;ii<=n ;ii++ ){
for(int jj=1;jj<=m ;jj++ ){
if(ii==1||ii==n)cnt[ii][jj]=tms;
else cnt[ii][jj]=tms*2;
}
}
///对lft进行分配
for(int ii=1;ii<=n ;ii++ ){
for(int jj=1;jj<=m ;jj++ ){
if(lft){
cnt[ii][jj]++;
lft--;
}
}
}
for(int ii=n-1;ii>=1 ;ii-- ){
for(int jj=1;jj<=m ;jj++ ){
if(lft){
cnt[ii][jj]++;
lft--;
}
}
}
mmx=max(cnt[1][1],max(cnt[2][1],cnt[n-1][1]));
mmn=cnt[n][m];
cout<<mmx<<" "<<mmn<<" "<<cnt[x][y];
}
标签:[1] rod ssi mat ace 次数 cstring std pre
原文地址:https://www.cnblogs.com/MalcolmMeng/p/10234806.html