2145 - 多米诺骨牌
小东非常喜欢玩多米诺骨牌,他有一套很特殊的骨牌,正面和反面都印有数字,并且这些数字大于等于1,小于等于6。小东很喜欢偶数,所以他想将他所有的多米诺骨牌摆成一排,使得正面数字的和和背面数字的和为偶数。但是有些情况下的初始状态并不是这样的,所以他需要将一些牌翻转180度,使其反面向前,正面向后,每翻转一次需要一秒钟,问小东最少需要多少秒钟才能打到他的目的。
Input
多组输入数据,第一行数字的总个数N(n ≤ 100000),第二行N个数字,每个数字都不会超过32位整数的范围,并且我们保证大于等于2.
Output
多组测试数据,第一行N,表示有N个多米诺骨牌.(1 ≤ N ≤ 100)
第2行到N + 1行,每行两个数字,第一个是正面,第二个是反面。且1 ≤ X ≤ 6
无法完成输出-1
Examples
Input
2 4 2 6 4 1 1 3 3 1 4 2 3 4 4
Output
0 -1 1
Solution C
#include<stdio.h> main() { int zheng[120],fan[120],n,unsame,sumzheng,sumfan; while(scanf("%d",&n)!=EOF) { unsame=0; sumzheng=0; sumfan=0; while(n--) { scanf("%d %d",&zheng[n],&fan[n]); sumzheng+=zheng[n]; sumfan+=fan[n]; if(zheng[n]%2!=fan[n]%2) unsame++; } if(sumzheng%2==1&&sumfan%2==1) { if(unsame!=0) puts("1"); else puts("-1"); continue; } if(sumzheng%2!=sumfan%2) { puts("-1"); continue; } if(sumzheng%2==0&&sumfan%2==0) { puts("0"); continue; } } }
Solution C++
#include<stdio.h> #include<string.h> int depth[6]; int sum_Upper, sum_Lower; int m; int main(){ int i, j, k; int a, b; //freopen("1.in", "r", stdin); //freopen("1.out", "w", stdout); while(scanf("%d", &m) != EOF){ sum_Lower = sum_Upper = 0; memset(depth, 0, sizeof(depth)); for(i = 0; i < m; i++){ scanf("%d%d", &a, &b); sum_Upper += a; sum_Lower += b; int s = a - b < 0 ? b - a : a - b; depth[s]++; } if((sum_Upper + sum_Lower ) % 2){ printf("-1\n"); continue; } bool q = sum_Upper % 2 ? false : true; bool p = sum_Lower % 2 ? false : true; if(q && p){ printf("0\n"); continue; } if(depth[1] || depth[3] || depth[5]){ printf("1\n"); } else{ printf("-1\n"); } } return 0; }