P1:n*m的矩形上有若干个单位矩形禁止通行,现在可以整行或者整列的走(不可转向,从头走到尾),问最多可经过多少个单位矩形,重复经过只统计一次。

直接暴力搞之...横刷一遍竖刷一遍输出即可。

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <string>
#include <memory.h>
using namespace std;
char s[20][20];
int n,m;
int r[20],c[20];
int rr,cc;
int main()
{cin>>n>>m;rr=0;cc=0;memset(r,0,sizeof r);memset(c,0,sizeof c);int ans=0;for (int i=1; i<=n; i++)for (int j=1; j<=m; j++)cin>>s[i][j];for (int i=1; i<=n; i++){int p=0;for (int j=1; j<=m; j++)if (s[i][j]=='S'){r[i]=-1;break;}else p++;if (r[i]!=-1){r[i]=p;ans+=p;rr++;}}for (int i=1; i<=m; i++){int p=0;for (int j=1; j<=n; j++)if (s[j][i]=='S'){c[i]=-1;break;}else p++;if (c[i]!=-1){c[i]=p;ans+=p;cc++;}}ans-=(rr*cc);cout<<ans<<endl;return 0;
}

P2:一个国家有n个城市,初始状态下各城市之间独立无道路连接,现在给出k条禁令,每条禁令包涵a,b表示a,b之间不允许有道路,现在问在不违反禁令的情况下,最少建造几条道路,可以满足这个国家中任意两个城市在经过不超过两条路的情况下可达,并输出任意一种方案。

注意到k<n/2,因为完全图中,n个节点共有n(n-1)/2,在k最大的情况下,仍然至少会有一个节点度数为n-1,即这个节点连向其他所有点(菊花链......),所以,只要找到这个节点,输出它和其他n-1个节点连接的道路即可。

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <memory.h>
#include <string>
#include <cstring>
using namespace std;
int n,m;
int d[1100];
int p,q;
int main()
{cin>>n>>m;for (int i=1; i<=n; i++)d[i]=n-1;for (int i=1; i<=m; i++){cin>>p>>q;d[p]--;d[q]--;}int tp=0;for (int i=1; i<=n; i++)if (d[i]==n-1){tp=i;break;}cout<<n-1<<endl;for (int i=1; i<=n; i++)if (i!=tp){cout<<tp<<" "<<i<<endl;}return 0;
}

P3:一个n*n区域被邪气污染,其中若干个单位区域被恶魔占据,主角无法到达(即使恶魔被净化也无法到达)。主角可以在x,y释放魔法,净化x行和y列的所有区域。现在问主角最少施放多少次魔法可以净化整片区域,同一点可以重复净化,不能净化整个区域时输出-1.

看似和麻烦,事实上如果区域可净化,只可能是每行释放一次魔法,或者是在每一列施放魔法。即设一个集合表示行数,若第i行存在一点可释放魔法,即将i加入集合,同样设另一个集合表示列数,只要行集合包涵1---n或者是列集合包涵1---n即可净化,任意输出一中方案即可,否则输出-1;

#include <iostream>
#include <cstdio>
#include <string>
#include <cstring>
#include <algorithm>
#include <memory.h>
using namespace std;
char s[200][200];
int r[200],c[200];
int n,m;
int main()
{cin>>n;for (int i=1; i<=n; i++)for (int j=1; j<=n; j++)cin>>s[i][j];int ct=0;for (int i=1; i<=n; i++){for (int j=1; j<=n; j++)if (s[i][j]=='.'){ct++;r[i]=j;break;}}if (ct==n){for (int i=1; i<=n; i++)cout<<i<<" "<<r[i]<<endl;return 0;}else{ct=0;for (int i=1; i<=n; i++){for (int j=1; j<=n; j++)if (s[j][i]=='.'){ct++;c[i]=j;break;}}}if (ct==n){for (int i=1; i<=n; i++)cout<<c[i]<<" "<<i<<endl;}else{cout<<"-1"<<endl;return 0;}return 0;
}

P4:喜闻乐见迷宫题,题意转化下来就是迷宫中有一些小队,每个小队有若干人,他们会自行移动。主人公同样也在向出口移动,在路上或者是是出口可能会遇到其他人,现在问主人公最少在遇到多少人的情况下可以走出迷宫。

不难想到,若小队a距出口的距离小于等于主人公距出口的距离,小队a一定可一追到主人公,所以只要以出口为起点,做一个bfs记录下出口到各点的距离,之后统计人数即可。需要注意的一点是有些区域可能会被障碍物个离开,初始化的时候要将所有区域到出口的距离设为无穷大,不然在统计时可能会把隔了区的小队人数也统计进去。

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <memory.h>
#include <queue>
#include <string>
#include <cstring>
int n,m;
char s[1100][1100];
struct node
{int num,x,y;
}t[1200000];
const int fx[5]={0,0,1,0,-1};
const int fy[5]={0,1,0,-1,0};
int dis[1100][1100];
bool f[1100][1100];
struct mp
{int x,y;int dis;
};
node st,ed;
using namespace std;int main()
{// freopen("a.in","r",stdin);for (int i=0; i<=1010; i++)for (int j=0; j<=1010; j++)dis[i][j]=9999999;memset(f,true,sizeof f);cin>>n>>m;int sp=0;for (int i=1; i<=n; i++)for (int j=1; j<=m; j++){cin>>s[i][j];if (s[i][j]=='S'){st.x=i;st.y=j;}if (s[i][j]>='0' && s[i][j]<='9'){sp++;t[sp].x=i;t[sp].y=j;t[sp].num=s[i][j]-'0';}if (s[i][j]=='E'){ed.x=i;ed.y=j;}}queue<mp> q;mp ss;ss.dis=0;ss.x=ed.x;ss.y=ed.y;q.push(ss);while (!q.empty()){mp tt=q.front();mp tp;for (int j=1; j<=4; j++){tp.x=tt.x+fx[j];tp.y=tt.y+fy[j];if (tp.x>0 && tp.y>0 && tp.x<=n && tp.y<=m && s[tp.x][tp.y]!='T' && f[tp.x][tp.y]){tp.dis=tt.dis+1;f[tp.x][tp.y]=false;q.push(tp);dis[tp.x][tp.y]=tp.dis;}}q.pop();}int ans=0;for (int i=1; i<=sp; i++)if (dis[t[i].x][t[i].y]<=dis[st.x][st.y])ans+=t[i].num;cout<<ans<<endl;return 0;
}

p5:..还没看,待填坑......

CF Round 192相关推荐

  1. 【codeforces】【比赛题解】#915 Educational CF Round 36

    虽然最近打了很多场CF,也涨了很多分,但是好久没写CF的题解了. 前几次刚刚紫名的CF,太伤感情了,一下子就掉下来了,不懂你们Div.1. 珂学的那场我只做了第一题--悲伤. 这次的Education ...

  2. 【codeforces】【比赛题解】#849 CF Round #431 (Div.2)

    cf的比赛越来越有难度了--至少我做起来是这样. 先看看题目吧:点我. 这次比赛是北京时间21:35开始的,算是比较良心. [A]奇数与结束 "奇数从哪里开始,又在哪里结束?梦想从何处起航, ...

  3. cf Round 613

    A.Peter and Snow Blower(计算几何) 给定一个点和一个多边形,求出这个多边形绕这个点旋转一圈后形成的面积. 保证这个点不在多边形内. 画个图能明白 这个图形是一个圆环,那么就是这 ...

  4. 【codeforces】【比赛题解】#937 CF Round #467 (Div. 2)

    没有参加,但是之后几天打了哦,第三场AK的CF比赛. CF大扫荡计划正在稳步进行. [A]Olympiad 题意: 给\(n\)个人颁奖,要满足: 至少有一个人拿奖. 如果得分为\(x\)的有奖,那么 ...

  5. 【codeforces】【比赛题解】#960 CF Round #474 (Div. 1 + Div. 2, combined)

    终于打了一场CF,不知道为什么我会去打00:05的CF比赛-- 不管怎么样,这次打的很好!拿到了Div. 2选手中的第一名,成功上紫! 以后还要再接再厉! [A]Check the string 题意 ...

  6. cf Round#779 D 388535

    前言: 这个方法挺慢的,不如其他大佬们的方法(但是我看不懂他们写的),所以自己来搞个.最坏的情况是n^2的复杂度,但是基本到不了最坏的情况.而且可以D1,D2两题通用! 核心思想: 假设 l^x=a1 ...

  7. 【codeforces】【比赛题解】#851 CF Round #432 (Div.2)

    cf真的难-- 点我浏览丧题. [A]Arpa和她对墨西哥人浪的研究 Arpa正在对墨西哥人浪进行研究. 有n个人站成一排,从1到n编号,他们从时刻0开始墨西哥人浪. 在时刻1,第一个人站起来. 在时 ...

  8. CF Round#240题解

    第一次参加CF的比赛,MSK19.30,四个小时的时差真心累,第一次CODE到这么夜-- 一开始做了A,C两题,后来做B题的时候我体力和精神集中度就很低了,导致一直WA在4-- 今天起床后再刷B,终于 ...

  9. CF Round #426 (Div. 2) The Useless Toy 思维 水题

    题目链接: http://codeforces.com/contest/834/problem/A 题目描述: 输入起始状态和结束状态和数列长度, 判断旋转方向是顺时针逆时针还是不合理 解题思路: 长 ...

最新文章

  1. ASPX页面中不放置Form元素的问题
  2. 单身萌妹纸手把手教你用产品思维追女生
  3. 【转】带你玩转Visual Studio——03.带你了解VC++各种类型的工程
  4. 服务器存档修改,云服务器存档修改器
  5. F5 cookie值与IP地址(二):将IP地址转换成F5 cookie值
  6. 围棋对杀,为何总是只差一气
  7. Kraker:分布式密码爆破系统
  8. 阿古斯机器人_炉石传说三选一卡池全部卡牌一览 挑战之旅冒险模式攻略
  9. 人人网登陆(selenium、PtantomJS结合)
  10. hadoop-hive安装
  11. .net分流抢票助手
  12. 智工教育:公务员必考的知识点内容
  13. 新进Linux菜鸟,请多多关照
  14. 【巷子】---flux---【react】
  15. PyQt5 文件保存对话框
  16. Python基础7:文件操作
  17. Docker搭建数据库监控工具Lepus
  18. QT5.8 中创建插件时Q_INTERFACES提示Undefined interface
  19. 学习ifconfig实战技巧,成为网络管理高手
  20. 可怕,GPT-3论坛跟帖灌水一周无人发现!专挑热搜,秒秒钟长文

热门文章

  1. 人生有多少次可以改命的机会,你把握住了几次,卷了几次(闲扯版)
  2. 使用QImage生成纯透明png图片
  3. 设备树学习(二十三、aliases节点分析)
  4. mybatis type-aliases-package
  5. mysql java配置文件_Mysql配置文件参数优化
  6. 创客集结号:国内无人机技术发展的难点有哪些?
  7. ARP协议及局域网断网攻击(scapy)
  8. 华为路由器接口如何区分_华为路由的线路输出的两种不同方法简介
  9. HDFS分布式文件系统架构
  10. Python3.9标准库math中的函数汇总介绍(53个函数和5个常数)