题解 P2255 【[USACO14JAN]记录奥林比克Recording the M…】

2019-06-15 00:00:00 题解

我的独立博客来了 很水的贪心
  1. 先按照结束时间sort,因为越早结束的节目越好
  2. 选择接受的收音机是优先选择潜力小的收音机,因为潜力大的收音机留在后面可能更有用
  3. return 0;

下面是代码

#include<bit/stdc++.h>
using namespace std;

int read() {
    register int x=1,ans=0;char ch=getchar();
    while(ch<'0'||ch>'9') {if(ch=='-') x*=-1;ch=getchar();}
    while(ch>='0'&&ch<='9'){ans=ans*10+ch-48;ch=getchar();}
    return x*ans;
}

const int N=155;
struct dat {
    int a,b;
}d[N];
int cnt;

bool cmp(dat a,dat b) {
    if(a.b==b.b) return a.a>b.a;
    return a.b<b.b;
}

int main() {
    int n=read();
    for(register int i=1;i<=n;i++) {
        d[i].a=read(); d[i].b=read();
    }
    sort(d+1,d+n+1,cmp);
    int cpu0=0,cpu1=0;//不要问我为什么起这个名字,一开始我把这个抽象成了电脑cpu的多核调度,后来发现我的建模是错的......
    for(register int i=1;i<=n;i++) {
        if(cpu0<cpu1) {int t=cpu0; cpu0=cpu1; cpu1=t;}//将潜力小的收音机放在前面
        if(cpu0<=d[i].a) {//调用收音机1
            cnt++; cpu0=d[i].b;
        }
        else if(cpu1<=d[i].a) {//调用收音机2
            cnt++; cpu1=d[i].b;
        }
    }
    printf("%dn",cnt); 
    return 0;
}

Josephminia

2026-01-22 15:59:27

您 确实 打开世界。保持方向! [url=https://iqvel.com/zh-Hans/a/%E6%84%8F%E5%A4%A7%E5%88%A9/%E7%BD%97%E9%A9%AC%E4%B8%87%E7%A5%9E%E6%AE%BF]古羅馬神廟[/url] 精彩的 关于旅行的门户! 你们真棒!