poj3190 區間貪心
阿新 • • 發佈:2019-01-02
2018-2-1
主要就是使用貪心,每次儘量多的安排多的奶牛,然後與之前的區間貪心不同的是,這裡是需要多次的直到所有的奶牛都安排完畢。
但是不知道為什麼一直TLE,暫時還沒有AC,只是把程式碼貼在這裡,有時間再好好看看。
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
const int N = 50000;
struct nn{
int s,e,v;
}x[N+1];
int n,y[N+1];
bool f[N+1];
bool cmp(struct nn a,struct nn b){
if (a.e==b.e) return a.s<b.s;
return a.e<b.e;
}
void res(){
int cnt=1,i,j=0,ee;
while (1){
i=j;
while (i<n&&f[i]) i++;
j=i+1;
if (i==n) break;
ee=x[i].e;
f[i]=true;
y[x[i].v]=cnt;
while (i<n){
while(i<n){
if (x[i].s<=ee||f[i]) i++;
else if (x[i].s>ee&&!f[i]) break;
}
if (i==n) break;
ee=x[i].e;
f[i]=true;
y[x[i].v]=cnt;
}
cnt++;
}
printf ("%d\n",cnt-1);
for (int i=0;i<n;i++){
printf("%d\n",y[i]);
}
}
int main(){
while (scanf("%d",&n)!=EOF){
memset(f,false,sizeof(f));
for (int i=0;i<n;i++){
scanf("%d%d",&x[i].s,&x[i].e);
//用scanf加快輸入
x[i].v=i;
}
sort(x,x+n,cmp);
//按照結束時間排序
res();
}
return 0;
}