程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 10148 - Advertisement

10148 - Advertisement

編輯:C++入門知識

[cpp] 
描述:區間選點問題,劉汝佳書上有這題,自己看看就會了 
#include <cstdio>  
#include <cstring>  
#include <cstdlib>  
int s[1010][2]; 
bool str[20010]; 
int cmp(const void *p1,const void *p2) 

    if(((int *)p1)[1] > ((int *)p2)[1]) return 1; 
    else if(((int *)p1)[1] < ((int *)p2)[1]) return -1; 
    else 
    { 
        if(((int *)p1)[0] > ((int *)p2)[0]) return -1; 
        else return 1; 
    } 

int main() 

    //freopen("a.txt","r",stdin);  
    int t,n,m,x,y,min,max,p; 
    scanf("%d",&t); 
    while(t--) 
    { 
        min=20000,max=p=0; 
        memset(str,false,sizeof(str)); 
        scanf("%d %d",&n,&m); 
        for(int i=0; i<m; i++) 
        { 
            scanf("%d %d",&x,&y); 
            if(x>y) 
            { 
                int t=x; 
                x=y; 
                y=t; 
            } 
            x+=10000; 
            y+=10000; 
            s[i][0]=x; 
            s[i][1]=y; 
            if(y>max) max=y; 
            if(x<min) min=x; 
        } 
        qsort(s,m,sizeof(s[0]),cmp); 
        for(int i=0; i<m; i++) 
        { 
            x=s[i][0]; 
            y=s[i][1]; 
            int count=0; 
            for(int j=x; j<=y; j++) if(str[j]) count++; 
            for(int j=y; j>=x&&count<n; j--) 
                if(!str[j]) 
                { 
                    str[j]=true; 
                    p++; 
                    count++; 
                } 
        } 
        printf("%d\n",p); 
        for(int i=min; i<=max; i++) 
            if(str[i]) printf("%d\n",i-10000); 
        if(t) printf("\n"); 
    } 
    return 0; 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved