1. 程式人生 > >poj3190 區間貪心

poj3190 區間貪心

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; }