第一次打CodeForces时间还是周三晚上,又累又困,同时由于博主水平有限,只A了A.C两题。
都是由数学规律写的,接下来给出两题的思路和本人的AC代码。
水平有限,敬请谅解。
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;
}