codeforce 192 div2解题报告
今天大家一起做的div2,怎么说呢,前三题有点坑,好多特判....
A. Cakeminator
题目的意思是说,让你吃掉cake,并且是一行或者一列下去,但是必须没有草莓的存在。这道题目,就是判断一下每行和每列的情况,看是不是有草莓存在,有的话就标记一下。后面就直接把木有草莓的行和列求和再减去重复路过的cake就行,不过你第一遍写的比较麻烦,小数据过了,后来WA了,现在改了一种写法。就是简单的加加减减。上代码:
[cpp]
<SPAN style="FONT-FAMILY: KaiTi_GB2312; FONT-SIZE: 18px">#include <iostream>
#include <cstdio>
#include <string>
#include <string.h>
#include <map>
#include <vector>
#include <cstdlib>
#include <algorithm>
#include <cmath>
#include <queue>
#include <set>
#include <stack>
using namespace std;
int n, m;
char sp[200][200];
int x[200];
int y[200];
int main()
{
scanf("%d%d", &n, &m);
for(int i = 0; i< n; ++i)
scanf("%s", sp[i]);
memset(x, 0, sizeof(x));
memset(y, 0, sizeof(y));
int sumxs = 0, sumys = 0;
for(int i = 0; i < n; ++i)
{
for(int j = 0; j < m; ++j)
{
if(sp[i][j] == 'S')
{
x[i] = 1;
sumxs++;
break;
}
}
}
for(int i = 0; i < m; ++i)
for(int j = 0; j <n; ++j)
{
if(sp[j][i] == 'S')
{
y[j] =1;
sumys++;
break;
}
}
//cout << sumxs << ' ' << sumys <<endl;
int cnt = 0;
cnt += (n-sumxs)*m;
cnt += (m-sumys)*n;
//cout << cnt <<endl;
cnt -= ((n-sumxs)*(m-sumys));
cout << cnt <<endl;
return 0;
}</SPAN>
#include <iostream>
#include <cstdio>
#include <string>
#include <string.h>
#include <map>
#include <vector>
#include <cstdlib>
#include <algorithm>
#include <cmath>
#include <queue>
#include <set>
#include <stack>
using namespace std;
int n, m;
char sp[200][200];
int x[200];
int y[200];
int main()
{
scanf("%d%d", &n, &m);
for(int i = 0; i< n; ++i)
scanf("%s", sp[i]);
memset(x, 0, sizeof(x));
memset(y, 0, sizeof(y));
int sumxs = 0, sumys = 0;
for(int i = 0; i < n; ++i)
{
for(int j = 0; j < m; ++j)
{
if(sp[i][j] == 'S')
{
x[i] = 1;
sumxs++;
break;
}
}
}
for(int i = 0; i < m; ++i)
for(int j = 0; j <n; ++j)
{
if(sp[j][i] == 'S')
{
y[j] =1;
sumys++;
break;
}
}
//cout << sumxs << ' ' << sumys <<endl;
int cnt = 0;
cnt += (n-sumxs)*m;
cnt += (m-sumys)*n;
//cout << cnt <<endl;
cnt -= ((n-sumxs)*(m-sumys));
cout << cnt <<endl;
return 0;
}
B. Road Construction
题目的意思是说现在给你n个点,然后在给你m个关系,这m个个关系表示某两条边之间不能连边,问你求最短的建筑方案是什么,要求任意两点之间距离不能超过2.
这道题目当时纠结了很久,不知道怎么去链接,后面才想到这只能是所有的点围在一个点的周围的情况。其它的总会有两点之间的距离超过2的。所以就简单了,直接找到可以和任何一个点相连的点,输出他和剩下的点的序列就行了 。
[cpp]
<SPAN style="FONT-FAMILY: KaiTi_GB2312; FONT-SIZE: 18px">#include <iostream>
#include <cstdio>
#include <string>
#include <string.h>
#include <map>
#include <vector>
#include <cstdlib>
#include <algorithm>
#include <cmath>
#include <queue>
#include <set>
#include <stack>
using namespace std;
char sp[200][200];
int main()
{
int n;
scanf("%d", &n);
补充:软件开发 , C++ ,