今天大家一起做的div2,怎么说呢,前三题有点坑,好多特判....

A. Cakeminator

题目的意思是说,让你吃掉cake,并且是一行或者一列下去,但是必须没有草莓的存在。这道题目,就是判断一下每行和每列的情况,看是不是有草莓存在,有的话就标记一下。后面就直接把木有草莓的行和列求和再减去重复路过的cake就行,不过你第一遍写的比较麻烦,小数据过了,后来WA了,现在改了一种写法。就是简单的加加减减。上代码:

#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的。所以就简单了,直接找到可以和任何一个点相连的点,输出他和剩下的点的序列就行了 。

#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);
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 <<endl;
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 <<endl;
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,判断:

#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);
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 <<endl;
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 <<endl;
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;
}

D. Biridian Forest

题目的意思就是打怪,你站在S点,要前往E点,但是森林中存在怪物,他们也会移动,并且移动的速度和你的一样。你如果到达一个点,这个点也有怪物的话,那你就需要大战怪兽,大战的次数等于怪物的数量。问你最少的大战次数是多少。

由于要求最优路径,肯定要用到BFS,再者,我们需要考虑如何计算我们会不会和怪兽碰上。按照题目意思,只要我们到出口的距离大于怪兽的点到出口的距离,那么我们就会碰到怪兽,这样的话,就直接可以从出口开始,求出各个点到出口的最短距离,再把怪兽的距离和我们的S的距离进行比较,如果小于的话那就不可避免的大战了,额,好吧。就是这样了:

#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[1500][1500];
struct node
{
int x;
int y;
} st,ed;
int vis[1500][1500];
int n, m;
int dx[4] = {0, 0, -1, 1};
int dy[5] = {-1, 1, 0, 0};
bool inmap(node a)
{
if(a.x <0||a.x >= n || a.y<0 || a.y >=m)
return false;
return true;
} void BFS()
{
memset(vis, -1, sizeof(vis));
queue<node>Q;
vis[ed.x][ed.y] = 0;
Q.push(ed);
node next;
while(!Q.empty())
{
node tp = Q.front();
Q.pop();
for(int i = 0; i < 4; ++i)
{
next.x = tp.x+dx[i];
next.y = tp.y+dy[i];
if(inmap(next) && vis[next.x][next.y]==-1&&sp[next.x][next.y]!='T')
{
vis[next.x][next.y] = vis[tp.x][tp.y]+1;
Q.push(next);
}
}
}
}
int main()
{
scanf("%d%d", &n, &m);
for(int i = 0; i < n; ++i)
scanf("%s", sp[i]);
int flag = 0;
for(int i = 0; i < n; ++i)
{
for(int j = 0; j < m; ++j)
{
if(sp[i][j] == 'S')
{
st.x = i;
st.y = j;
if(flag == 1)
{
i = n;
j = m;
}
else
flag = 1;
}
if(sp[i][j] == 'E')
{
ed.x = i;
ed.y = j;
if(flag == 1)
{
i = n;
j = m;
}
else
flag = 1;
}
}
}
BFS();
int cnt = 0;
int MAX = vis[st.x][st.y];
for(int i = 0; i <n ; ++i)
{
for(int j = 0; j < m; ++j)
{
if(sp[i][j]>='1'&& sp[i][j]<='9')
if(vis[i][j] <= MAX && vis[i][j] != -1)
cnt+=(sp[i][j] - '0');
}
}
cout << cnt <<endl;
return 0;
}

E题,还在看...

codeforce 192 div2解题报告的更多相关文章

  1. Codeforces #263 div2 解题报告

    比赛链接:http://codeforces.com/contest/462 这次比赛的时候,刚刚注冊的时候非常想好好的做一下,可是网上喝了个小酒之后.也就迷迷糊糊地看了题目,做了几题.一觉醒来发现r ...

  2. Codeforces Round#320 Div2 解题报告

    Codeforces Round#320 Div2 先做个标题党,骗骗访问量,结束后再来写咯. codeforces 579A Raising Bacteria codeforces 579B Fin ...

  3. codeforces #232 div2 解题报告

    A:简单题:我们可以把点换成段处理,然后枚举段看是否被霸占了: #include<iostream> #include<]; ]=;     ;i<=n;i++)     { ...

  4. Codeforces Round #299 Div2 解题报告

    这场比赛并没有打现场,昨天晚上做了ABCD四道题,今天做掉了E题 以前还没有过切完一场比赛的所有题呢~爽~ A. Tavas and Nafas   Today Tavas got his test ...

  5. 【CodeChef】August Challenge 2019 Div2 解题报告

    点此进入比赛 \(T1\):Football(点此看题面) 大致题意: 求\(max(20a_i-10b_i,0)\). 送分题不解释. #include<bits/stdc++.h> # ...

  6. Codeforces Round #382 (Div. 2) 解题报告

    CF一如既往在深夜举行,我也一如既往在周三上午的C++课上进行了virtual participation.这次div2的题目除了E题都水的一塌糊涂,参赛时的E题最后也没有几个参赛者AC,排名又成为了 ...

  7. CH Round #56 - 国庆节欢乐赛解题报告

    最近CH上的比赛很多,在此会全部写出解题报告,与大家交流一下解题方法与技巧. T1 魔幻森林 描述 Cortana来到了一片魔幻森林,这片森林可以被视作一个N*M的矩阵,矩阵中的每个位置上都长着一棵树 ...

  8. 二模13day1解题报告

    二模13day1解题报告 T1.发射站(station) N个发射站,每个发射站有高度hi,发射信号强度vi,每个发射站的信号只会被左和右第一个比他高的收到.现在求收到信号最强的发射站. 我用了时间复 ...

  9. BZOJ 1051 最受欢迎的牛 解题报告

    题目直接摆在这里! 1051: [HAOI2006]受欢迎的牛 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 4438  Solved: 2353[S ...

随机推荐

  1. Docker化高可用redis集群

    最近遇到部分系统因为redis服务挂掉,导致部分服务不可用.所以希望搭建一个redis集群镜像,把原先散落各处的redis服务器统一管理起来,并且保障高可用和故障自动迁移. 一:redis集群分类 大 ...

  2. Java—Math类和随机数类

    一.Math类(主要封装算数运算的静态方法) 定义: Math是没有构造方法的. java语言中提供了一个执行数学基本运算的Math类,Math类包括常用的数学运算和一些数学函数.还提供了一些常用的常 ...

  3. InnoDB的锁机制浅析(五)—死锁场景(Insert死锁)

    可能的死锁场景 文章总共分为五个部分: InnoDB的锁机制浅析(一)-基本概念/兼容矩阵 InnoDB的锁机制浅析(二)-探索InnoDB中的锁(Record锁/Gap锁/Next-key锁/插入意 ...

  4. 快速沃尔什变换与k进制FWT

    这是一篇用来卖萌的文章QAQ 考虑以下三类卷积 \(C_k = \sum \limits_{i \;or\;j = k} A_i * B_j\) \(C_k = \sum \limits_{i\;an ...

  5. Beta冲刺准备

    过去存在的问题: 界面不够美观 推荐不够人性化 代码不够符合开闭原则 我们已经做了哪些调整/改进: 本来想引入springAndroid,但看了下google的官方文档,不建议引入第三方框架:代码重构 ...

  6. CentOS 7 下编译安装lnmp之PHP篇详解

    一.安装环境 宿主机=> win7,虚拟机 centos => 系统版本:centos-release-7-5.1804.el7.centos.x86_64 二.PHP下载 官网 http ...

  7. Delphi 的链式代码

    有了一系列的 Helper, Delphi 也可以使用链式代码了. //譬如要把 3.1415926 中的 141 提取为一个整数: var num: Integer; begin num := Pi ...

  8. sql server在执行批处理时出现错误。错误消息为: 目录名无效

    今天在客户服务器上的sql server上执行脚本,报错提示“在执行批处理时出现错误.错误消息为:目录名无效”,第一反应就是客户是不是在服务器装了360,因为之前有类似问题,360把数据库的文件给隔离 ...

  9. 采用模拟账号读取Exchange server未读邮件的注意事项(链接邮箱问题)【转】

    最近做项目碰到Exchange中,用EWS API方法读取的未读邮箱(ConnectingIdType.PrincipalName设置该属性的方法)附带代码部分: 核心代码 using Microso ...

  10. [Node.js]连接mongodb

    摘要 前面介绍了node.js操作mysql以及redis的内容,这里继续学习操作mongodb的内容. 安装驱动 安装命令 cnpm install mongodb 安装成功 数据库操作 因为mon ...