codeforces 430 A Points and Segments (easy)

题意:给出n个点,m个区间,需要给这些点涂上蓝色或者红色,使得每个区间里面的点的红色的点的个数与蓝色的点的个数的差值小于1

唉,题目的标题就标注了一个easy= = 最开始做的时候对点还有区间都排序了,模拟来做,可是错了

后来发现不管区间怎么样,只要红色和蓝色交替涂色,

就一定能满足“使得每个区间里面的点的红色的点的个数与蓝色的点的个数的差值小于1 ”这个条件

有点像上次做的cf交替输出奇数偶数那个A题

 #include<iostream>
#include<cstdio>
#include<cstring>
#include <cmath>
#include<stack>
#include<vector>
#include<map>
#include<set>
#include<queue>
#include<algorithm>
using namespace std; typedef long long LL;
const int INF = (<<)-;
const int mod=;
const int maxn=; struct node{
int x,y,z;
} a[maxn]; int cmp(node n1,node n2){
if(n1.x!=n2.x) return n1.x<n2.x;
return n1.y<n2.y;
} int main(){
int n,m;
scanf("%d %d",&n,&m);
for(int i=;i<=n;i++){
scanf("%d",&a[i].x);
a[i].y=i;
a[i].z=;
} sort(a+,a+n+,cmp); while(m--){
int u,v;
cin>>u>>v;
} for(int i=;i<=n;i++){
if(i%) a[a[i].y].z=;
else a[a[i].y].z=;
} for(int i=;i<=n;i++)
printf("%d ",a[i].z);
return ;
}
上一篇:Java数据处理,Map中数据转double并取小数点后两位


下一篇:一篇文章看懂JS执行上下文