题目链接:http://codeforces.com/contest/441/problem/C
这套题目可以来说是非常简单的。以前看到C题都会无从下手。这次反而思路比较清晰。感觉对于中国人打CF来说,翻译题目才是最大的难题吧。
题意是给你一个M*N的矩阵。给你一个K,要用K根管子铺满矩阵,不能空也不能重复。有多种铺满的方式,只要输出一种就好。
对于每一根管子有限制条件:
1.水管长度要>=2;
2.(个人理解)在不超出矩阵的情况下,管子的下一部分必须在上一部分的上下左右。(例如管子上一部分坐标是2.2,那么假设其他地方都为空。那么下部分可以是1.2,2.1,2.3,3.2)
那么这道题就很简单了。一层一层的铺,总可以铺满,而且题目保证数据合法。(对于模拟题我可是很擅长的)。
By veritaswu, contest: Codeforces Round #252 (Div. 2), problem: (C) Valera and Tubes , Accepted, #
#include<stdio.h>
int main()
{
int m,n,k,ans;
int cnt;
int i,j,kk;
int x;
int flag=1;
scanf("%d %d %d",&m,&n,&k);
ans=m*n/k;
if(ans<2)
ans=2;
i=1;
j=1;
for(kk=1;kk<=k-1;kk++)
{
printf("%d",ans);
for(x=1;x<=ans;x++)
{
if(j>=1&&j<=n)
{
printf(" %d %d",i,j);
j+=flag;
}
if(j>n)
{
j=n;
i++;
flag=-1;
}
if(j<1)
{
j=1;
i++;
flag=1;
}
}
printf("\n");
}
ans=m*n-(k-1)*ans;
printf("%d",ans);
for(x=1;x<=ans;x++)
{
if(j>=1&&j<=n)
{
printf(" %d %d",i,j);
j+=flag;
}
if(j>n)
{
j=n;
i++;
flag=-1;
}
if(j<1)
{
j=1;
i++;
flag=1;
}
}
printf("\n");
return 0;
}