ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

poj2965 The Pilots Brothers' Refrigerator 题解报告

2019-07-29 09:03:37  阅读:260  来源: 互联网

标签:状态 Brothers 题解 位置 改变 rg poj2965 include define


题目传送门

【题目大意】

有一个$4*4$的矩阵,现在要把矩阵内所有的“+”变成“-”,已知如果选取一个位置$(i,j)$改变状态,那么第$i$行和第$j$列的所有位置的状态都会改变,求达到要求的最小步数和改变状态的顺序。

【思路分析】

分析可得,对于某个“+”的位置$(i,j)$,要使它的状态改变而其他位置状态不变,则第$i$行和第$j$列的所有位置(除去$(i,j)$身)都要选出来被改变状态,且当某一个位置的状态被改变偶数次时,相当于没有改变。

【代码实现】

 1 #include<iostream>
 2 #include<cstdio>
 3 #define rg register
 4 #define go(i,a,b) for(rg int i=a;i<=b;i++)
 5 using namespace std;
 6 int ans,x[20],y[20];
 7 bool mark[5][5];
 8 char c[5][5];
 9 int main(){
10     go(i,1,4){
11         scanf("%s",c[i]+1);
12         go(j,1,4){
13             if(c[i][j]=='+'){
14                 mark[i][j]=!mark[i][j];
15                 go(k,1,4){
16                     mark[i][k]=!mark[i][k];mark[k][j]=!mark[k][j];
17                 }
18             }
19         }
20     }
21     go(i,1,4) go(j,1,4)
22         if(mark[i][j]) x[++ans]=i,y[ans]=j;
23     printf("%d\n",ans);
24     go(i,1,ans)
25         printf("%d %d\n",x[i],y[i]);
26     return 0;
27 }
代码戳这里

标签:状态,Brothers,题解,位置,改变,rg,poj2965,include,define
来源: https://www.cnblogs.com/THWZF/p/11261945.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有