CodeForces Round #531(div.3)部分题解

第一次打CodeForces时间还是周三晚上,又累又困,同时由于博主水平有限,只A了A.C两题。

都是由数学规律写的,接下来给出两题的思路和本人的AC代码。

水平有限,敬请谅解。

A - Integer Sequence Dividing

http://codeforces.com/contest/1102/problem/A


题目大意:

题目的大致意思是说将1到N个数字分为两组,求两组数据之和的差值的绝对值最小值。

其实可以不用这么麻烦,仔细观察可以得到

1,

1=1;

2,

-1+2=1;

3,

1+2-3=0;

4,

1+4-2-3=0;

5,

3+5-1-2-4=1;

其实结果是1100这样的四个为一组的循环。

AC代码如下:

#include<iostream>
using namespace std;
int main(){
	int n;
	cin>>n;
	int casee;
	casee=n%4;
	if(casee==1||casee==2){
		cout<<1<<endl;
	}else{
		cout<<0<<endl;
	}
	
	return 0;
} 

 

 

C - Doors Breaking and Repairing

http://codeforces.com/contest/1102/problem/C

题目大意:

题目大致意思是给定N个门的生命值,你可以在一个回合内破坏一扇门的X,而对方可以修补Y,但是对方无法修复耐久为0的门,回合数足够大。

 

解题思路:

只需分情况讨论,当你的破坏值大于对方的修复值的时候,无论如何,所有的门都会被破坏。

而如果你的破坏值小于或者等于对方的时候,只能一次性破坏小于或者等于X的门。

 

AC代码如下:

#include<iostream>
#include<algorithm>
using namespace std;
int a[100005];
int main(){
	int n,x,y;
	cin>>n>>x>>y;
	for(int i=0;i<n;i++){
		cin>>a[i];
	}
	if(x>y){
		cout<<n<<endl;
	}
	sort(a,a+n);
	int num=0;
	for(int i=0;i<n;i++){
		if(a[i]<=x){
			num++;
		}
	}
	if(x==y||x<y){
		if(num%2==0){
			cout<<num/2<<endl;
		}else cout<<(num/2)+1<<endl;
	}
	return 0;
} 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值