本文主要是介绍Codeforces Round #229 (Div. 2),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
模拟放数过程,从大往小放。
先放最外层,最外层有可能不会被放满,然后逐步的往里放,一直到第一层为止。
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<iostream>
using namespace std;
int dp[100001];
void chu(int n,int m)
{int i,j;for(i=1; i<=m; i++){dp[i]=min(i,n);}int st=n-1;for(j=st; j>=1; j--){dp[i+st-j]=j;}
}
int main()
{int n,m,k;int leap=0;int i,j;int step;while(~scanf("%d %d %d%*c",&n,&m,&k)){if(m<n){leap=1;swap(m,n);}chu(n,m);int sum=0;step=0;for(i=1; i<=n+m-1; i++){sum+=dp[i];step+=dp[i]*i;if(sum>=k)break;}int biao;biao=i;int need=dp[i]-(sum-k);step-=(sum-k)*i;cout<<step<<endl;int ii,jj;int st;int ll;for(i=1;i<=need;i++){ii=1,jj=1;ll=0;st=biao;while(st--){if(leap==0)printf("(%d,%d)",ii,jj);else printf("(%d,%d)",jj,ii);if(ll==0)jj++;else ii++;if(jj==min(biao,m)-i+2){jj--;ll=1;ii++;}}cout<<endl;}for(i=biao-1; i>=1; i--){for(j=1; j<=dp[i]; j++){st=i;ii=1,jj=1;ll=0;while(st--){if(leap==0)printf("(%d,%d)",ii,jj);else printf("(%d,%d)",jj,ii);if(ll==0)jj++;else ii++;if(jj==min(i,m)+2-j){jj--;ll=1;ii++;}}cout<<endl;}}}return 0;
}
这篇关于Codeforces Round #229 (Div. 2)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!