poj_2965
2015-06-12 16:40
323 查看
其实这道题目和1753差不多,可以用dfs来做,但是我们可以有更简单的方法。对于每一个’+’号的棋子,我们一定会去翻它。遍历整个棋盘,都按照上述说的去做,在这个过程中,我们统计每个棋子被翻的次数,最后对于每一个棋子,如果它的被翻次数是奇数,那么我们就说这个棋子是需要被操作的,而偶数的就相当于不需要操作,仍然保持原来的状态。
#include<stdio.h> #include<iostream> #include<string> #include<string.h> #include<algorithm> #include<iomanip> #include<vector> #include<time.h> #include<queue> #include<stack> #include<iterator> #include<math.h> #include<stdlib.h> #include<limits.h> #include<map> //#define ONLINE_JUDGE #define eps 1e-10 #define INF 0x7fffffff #define FOR(i,a) for((i)=0;i<(a);(i)++) #define MEM(a) (memset((a),0,sizeof(a))) #define sfs(a) scanf("%s",a) #define sf(a) scanf("%d",&a) #define sfI(a) scanf("%I64d",&a) #define pf(a) printf("%d\n",a) #define pfI(a) printf("%I64d\n",a) #define pfs(a) printf("%s\n",a) #define sfd(a,b) scanf("%d%d",&a,&b) #define sft(a,b,c)scanf("%d%d%d",&a,&b,&c) #define for1(i,a,b) for(int i=(a);i<b;i++) #define for2(i,a,b) for(int i=(a);i<=b;i++) #define for3(i,a,b)for(int i=(b);i>=a;i--) #define MEM1(a) memset(a,0,sizeof(a)) #define MEM2(a) memset(a,-1,sizeof(a)) #define ll __int64 const double PI=acos(-1.0); template<class T> T gcd(T a,T b){return b?gcd(b,a%b):a;} template<class T> T lcm(T a,T b){return a/gcd(a,b)*b;} template<class T> inline T Min(T a,T b){return a<b?a:b;} template<class T> inline T Max(T a,T b){return a>b?a:b;} using namespace std; int n,m,k; #define N 8080 int mp[8][8]; int vis[8][8]; int num; void make_change(int x,int y){ for(int i=1;i<=4;i++) vis[x][i]++; for(int i=1;i<=4;i++) vis[i][y]++; vis[x][y]--; } int main() { #ifndef ONLINE_JUDGE freopen("in.txt","r",stdin); // freopen("out.txt","w",stdout); #endif char ch[8]; while(scanf("%s",ch+1)!=EOF){ for(int i=1;i<=4;i++) mp[1][i] = (ch[i]=='-'?1:0); for(int i=2;i<=4;i++){ sfs(ch+1); for(int j=1;j<=4;j++) mp[i][j] = (ch[j]=='-'?1:0); } memset(vis,0,sizeof vis); for(int i=1;i<=4;i++){ for(int j=1;j<=4;j++){ if(mp[i][j]==0){ make_change(i,j); } } } int ans=0; for(int i=1;i<=4;i++) for(int j=1;j<=4;j++) if(vis[i][j]&1) ans++; printf("%d\n",ans); for(int i=1;i<=4;i++) for(int j=1;j<=4;j++) if(vis[i][j]&1) printf("%d %d\n",i,j); } return 0; }
相关文章推荐
- linux共享内存
- Android IOS WebRTC 音视频开发总结(二九)-- 安卓噪声消除交流
- Hash函数及其应用
- ASP.NET MVC 4 跨域
- Java @override报错的解决方法
- linux_shell_拆分文件_多进程脚本
- 读10 11 12章
- [LeetCode] Longest Consecutive Sequence
- sql sever数据库释放内存
- Timer的schedule和scheduleAtFixedRate方法的区别解析
- 什么架构的PMS适合大中型酒店集团?
- “二手”京东,自营缺乏约束,那些退货又去哪了?
- DHCP协议
- 最短路径算法
- android实现点赞动画
- iOS中AutoLayer自动布局流程及相关方法
- 【Java安全技术探索之路系列:Java可扩展安全架构】之一:Java可扩展安全架构开篇
- leetcode - ZigZag Conversion
- Java下拼接执行动态SQL语句
- Java下拼接执行动态SQL语句