codeforce 192 div2解题报告 (二)

2014-11-23 22:37:23 · 作者: · 浏览: 14
else
{
for(int i = 0; i < k-1; i+=2)
printf("%d %d\n", sum[i], sum[i+1]);
}
}

return 0;
}

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
char sp[200][200];
int main()
{
int n;
scanf("%d", &n);
for(int i = 0; i < n; ++i)
scanf("%s", sp[i]);
int hang = 0;
int sum[10000];
int k = 0;
for(int i = 0; i < n; ++i)
{
for(int j = 0; j < n; ++j)
{
if(sp[i][j] == '.')
{
//cout << i << ' ' << j < hang++;
sum[k++] = i+1;
sum[k++] = j+1;
break;
}
}
}
if(hang == n)
{
for(int i = 0; i < k-1; i+=2)
printf("%d %d\n", sum[i], sum[i+1]);
}
else
{
int lie = 0;
k = 0;
for(int i = 0; i < n; ++i)
{
for(int j = 0; j < n; ++j)
{
if(sp[j][i] == '.')
{
//cout << i << ' ' << j < lie++;
sum[k++] = j+1;
sum[k++] = i+1;
break;
}
}
}
if(lie < n)
printf("-1\n");
else
{
for(int i = 0; i < k-1; i+=2)
printf("%d %d\n", sum[i], sum[i+1]);
}
}

return 0;
}

C. Purification

题目的意思是说,你面对一个方格,这个方格的,每一个点都需要“清洗”一下。但是有的点是可以站立的,有些点是僵尸,不能站立。你的能力是当你站在一个点上时,你可以“清洗”你所在的行和列。现在给你当前方格的状态,求出最小的站立点数,使得所有的点都能被“清洗”掉。

就是把每一行和每一列“覆盖”一下啊。站就行了。从行开始检测,如果每一行都可以站立,那就OK了。不能的话就在从列开始检测,如果可以就OK,还是不行的话就输出“-1”就可以了。最少的步数不是行数/列数就是-1了,OK,判断:


[cpp]
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
char sp[200][200];
int main()
{
int n;
scanf("%d", &n);
for(int i = 0; i < n; ++i)
scanf("%s", sp[i]);
int hang = 0;
int sum[10000];
int k = 0;
for(int i = 0; i < n; ++i)
{
for(int j = 0; j < n; ++j)
{
if(sp[i][j] == '.')
{
//cout << i << ' ' << j < hang++;
sum[k++] = i+1;
sum[k++] = j+1;
break;
}
}
}
if(hang == n)
{
for(int i = 0; i < k-1; i+=2)
printf("%d %d\n", sum[i], sum[i+1]);
}
else
{
int lie = 0;
k = 0;
for(int i = 0; i < n; ++i)
{
for(int j = 0; j < n; ++j)
{
if(sp[j][i] == '.')
{
//cout << i << ' ' << j < lie++;
sum[k++] = j+1;
sum[k++] = i+1;
break;
}
}
}
if(lie < n)
printf("-1\n");
else
{
for(int i = 0; i < k-1; i+=2)
printf("%d %d\n", sum[i], sum[i+1]);
}
}

return 0;
}

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
char sp[200][200];
int main()
{
int n;
scanf("%d", &n);
for(int i = 0; i < n; ++i)
scanf("%s", sp[i]);
int hang = 0;
int sum[10000];
int k = 0;
for(int i = 0; i < n; ++i)
{
for(int j = 0; j < n; ++j)
{
if(sp[i][j] == '.')
{
//cout << i << ' ' << j < hang++;
sum[k++] = i+1;
sum[k++] = j+1;
break;
}