CodeForces
来源:互联网 发布:php 获取共享文件 编辑:程序博客网 时间:2024/06/07 00:32
CodeForces - 330C Purification
题意:一个n阶矩阵,' . '代表这一股邪恶力量,'E'代表着多股的邪恶力量,在一个格子上施法,与这个格子同行同列的邪恶力量都会被消除,但是不能在‘E’上施法,即使这个E上的邪恶力量已经被消除,这个矩阵每个点都有邪恶力量,求把所有邪恶力量都消除的最小施法次数对应的施法位置,如果不能消灭所有的邪恶力量,则输出-1
思路:当有一个点所在列,所在行都是E时,那么这个点的邪恶力量肯定无法消除,输出-1。如果可以消除所有的邪恶力量,那么施法最小的次数肯定为n次,并且这n次在不同列或不同行,这样的话我们就遍历每一行或每一列,在每一行或每一列找出'.'点就行了
#include<stdio.h>#include<string.h>#include<queue>using namespace std;char map[101][101];int r[101],c[101];struct node{int x,y;node(){}node(int tx,int ty){x=tx;y=ty;}};void print(queue<node> q){while(!q.empty()){struct node n1;n1=q.front();printf("%d %d\n",n1.x+1,n1.y+1);q.pop();}}int main(void){int n;scanf("%d",&n);for(int i=0;i<n;i++){scanf("%s",map[i]);for(int j=0;j<n;j++){if(map[i][j]=='E'){r[i]++;c[j]++;}}}queue<node> q1,q2;int flag1=0,flag2=0;for(int i=0;i<n;i++){if(r[i]==n){flag1=1;break;}for(int j=0;j<n;j++){if(map[i][j]=='.'){q1.push(node(i,j));break;}}}for(int i=0;i<n;i++){if(c[i]==n){flag2=1;break;}for(int j=0;j<n;j++){if(map[j][i]=='.'){q2.push(node(j,i));break;}}}if(flag1&&flag2){printf("-1\n");}else if(flag1){print(q2);}else if(flag2){print(q1);}else{print(q1);}return 0;}
阅读全文
0 0
- codeforces~~~
- Codeforces
- codeforces
- Codeforces
- codeforces
- codeforces
- Codeforces
- Codeforces
- CodeForces
- CodeForces
- CodeForces
- CodeForces
- CodeForces
- Codeforces
- Codeforces
- Codeforces
- Codeforces
- Codeforces
- Python数据结构之单链表
- 【Pyhton爬虫一】requests与BeautifulSoup
- 算法的基本特征
- Oracle
- javaScript收藏的一些语句
- CodeForces
- JAVA_HOME环境变量失效的解决办法
- MyBatis传入参数为list、数组、map写法
- SQL语句 对表的某一个字段进行排重 查询
- 裴蜀定理详解+例题: BZOJ 1441 MIN
- 鼠标悬停图标
- 【oracle】使用EXPDP和IMPDP数据泵进行导出导入的方法
- Android项目组件化架构
- JVM方法内联