Day4-T1

原题目

  Hades 与 Dionysus 在狂饮后玩起了多米诺骨牌的小游戏。 现在桌上有 N 块多米诺骨牌,每块多米诺骨牌上半部分和下半部分上都有一个整数。每次翻转可让 一块多米诺骨牌上下翻转,即上下部分数交换。Hades 想让 N 块骨牌上半部分的数加起来是一个偶数, 而 Dionysus 想让这 N 块骨牌下半部分的数加起来是一个偶数。喝醉的两人都不肯退让,非要达到自己 的目的。路过的 Hephaestus 在扫了一眼桌上的骨牌后瞬间给出了一个让两人都满意且翻转次数最少的 方案,便转身离去,留下迟滞的二人。可这还没完,喝得烂醉的二人很快忘记了 Hephaestus 所说的方 案,Hades 说他还记得最少的翻转次数,Dionysus 不愿被比下去,只好来请教你了。

  第一行包含一个整数 N,表示多米诺骨牌的数量。 之后 N 行,每行包含两个分隔的整数 Xi,Yi,初始时 Xi 在上方,Yi 在下方。

  输出共一行一个整数,表示所需的最少翻转次数。若无法达到目的,输出"-1"。

S1:

  Input

 

2
4 2
6 4

 

  Output

0

 

S2:

  Input

1
2 3

  Output

-1

 

S3:

  Input

3
1 4
2 3
4 4

  Output

1

 


 

  Describe:首先明确就三种答案,-1,0,1. 然后分类讨论

  code:

#include<bits/stdc++.h>
using namespace std;
inline int read() {
	int ret=0,f=1;
	char ch=getchar();
	while (ch<'0'||ch>'9') {
		if (ch=='-') f=-f;
		ch=getchar();
	}
	while (ch>='0'&&ch<='9') ret=ret*10+ch-'0',ch=getchar();
	return ret*f;
}
int n; 
struct pig{
	int x,y;
}a[5005];
int sumx,sumy;
int main() {
	//freopen("domino.in","r",stdin);
	//freopen("domino.out","w",stdout);
	n=read();
	for(int i=1;i<=n;i++){
		a[i].x=read();
		a[i].y=read();
		sumx+=a[i].x;
		sumy+=a[i].y;
	}
	if((sumy%2==0)&&(sumx%2==0)){                             //原来就满足条件
		puts("0");
		return 0;
	}
	if(sumx%2!=sumy%2){                                       //和为奇数不可能
		puts("-1");
		return 0; 
	}
	if(sumx%2==1&&sumy%2==1){
		for(int i=1;i<=n;i++){
			if((!(sumx-a[i].x+a[i].y)%2)&&(!(sumy-a[i].y+a[i].x)%2)){               //交换后可以满足条件
				puts("1");
				return 0;
			}
		}
	}
	puts("-1");                                                //上下奇偶性一一对应相等
	return 0;
}

  

转载于:https://www.cnblogs.com/sroht/p/9890929.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值