4 solutions

  • 2
    @ 2024-9-26 17:14:23

    这是一道很经典的贪心题

    做法主要分几个步骤:

    一、按照每个活动的结束时间升序。

    二、每次先选在可以安排的活动中结束时间最小的,然后计算总个数。

    三、输出答案。

    证明:

    首先,在选第一个活动的时候,如果是要选某一个活动的时候,那么那个活动肯定是挤掉的活动最少的那个,毕竟如果都被挤掉了,那还选什么?

    然后,在选后面的活动的时候也是同理。

    那么怎么选挤掉的活动最少的那个?

    答案是选结束时间最早的那个!

    然后,我们就可以轻松的解出这道题了ψ(`∇´)ψ

    AC code:

    
    #include<bits/stdc++.h>
    using namespace std;
    struct dtl{
    	int s,f;
    }a[1001];
    int n,ans=1,f;
    bool cmp(dtl x,dtl y){
    	return x.f<y.f;
    }
    int main(){
    	cin>>n;
    	for(int i=1;i<=n;++i)cin>>a[i].s>>a[i].f;
    	sort(a+1,a+1+n,cmp);
    	f=a[1].f;
    	for(int i=2;i<=n;++i){
    		if(a[i].s<f)continue;
    		ans++;
    		f=a[i].f;
    	}
    	cout<<ans<<endl;
    	return 0;
    }
    
    
  • 1
    @ 2023-5-26 16:45:22

    这是本一通上的例题。大概是橙题。

    做法就是按照每个活动的结束时间升序排序,然后再贪心一遍即可。

    • 0
      @ 2026-3-29 8:23:00

      合卡游戏,三个肥波合成一个瘦波

      • 0
        @ 2026-3-14 11:19:56

        肥波合卡游戏

        #include<bits/stdc++.h>
        using namespace std;
        string s[50]={"glass","leaf","corn","rice","light","triangle","yucca","bone","relic","plank","basil","soil","shovel","bgg","pincer","privet","iris","powder","cactus","bubble","air","starfish","sand","sponge","lightning","claw","root","dahlia","bur","missiel","stinger","orange","wax","honey","poo","wing","faster","talisman","dice","chip","battery","sawblade","fragment","totem","mimic","corruption","crown","moon","yggdrasil","compass"},di[5]={"","legendary","mythic","ultra","super"};
        map<string,int> cnt[5],p,id;
        int random(int n)
        {
        	return 1ll*rand()*rand()%n;
        }
        int main()
        {
        	srand((unsigned)time(0));
        	cout<<"you have these legendary petal:"<<endl;
        	for (int i=0;i<50;i++)
        		cnt[1][s[i]]=100000/*可修改,不能超过1000000*/,cout<<s[i]<<" "<<cnt[1][s[i]]<<endl;
        	id["legendary"]=1;
        	id["mythic"]=2;
        	id["ultra"]=3;
        	id["super"]=4;
        	cout<<"now start to craft!"<<endl;
        	while(true)//输入hxxxxxh结束合卡 
        	{
        		string lev,pt;
        		int x,sum=0;
        		cin>>lev;
        		if(lev=="hxxxxxh")
        			break;
        		cin>>pt>>x; 
        		if(cnt[id[lev]][pt]<x)
        		{
        			cout<<"fuck you noob宸!"<<endl;
        			continue; 
        		}
        		x=x/5;
        		for (int i=1;i<=x;i++)
        		{
        			int y=random(100);
        			if(id[lev]==1&&y%24==0)
        				sum++;
        			if(id[lev]==2&&y%45==0)
        				sum++;
        			if(id[lev]==3&&y==50)
        				sum++;
        		}
        		cnt[id[lev]+1][pt]+=sum;
        		cnt[id[lev]][pt]=random(5);
        		cout<<"you have crafted "<<sum<<" "<<di[id[lev]+1]<<" "<<pt<<"!!!!!"<<endl;
        		cout<<"now you have these level "<<pt<<":"<<endl;
        		for (int i=1;i<=4;i++)
        			cout<<di[i]<<" "<<cnt[i][pt]<<endl;
        	}
        	bool flg=0;
        	//legendary和mythic过于noob,所以只输出ultra和super花瓣
        	cout<<"ultra petal:"<<endl;
        	for (int j=0;j<50;j++)
        		if(cnt[3][s[j]])
        			cout<<s[j]<<" "<<cnt[3][s[j]]<<endl;
        	cout<<"super petal:"<<endl;
        	for (int j=0;j<50;j++)
        		if(cnt[4][s[j]])
        			cout<<s[j]<<" "<<cnt[4][s[j]]<<endl,flg=1;
        	//出super的是pro,没出的是noob
        	if(flg)
        		cout<<"pro!!!"<<endl;
        	else
        		cout<<"noob..."<<endl;
        	return 0;
        }
        
        
        • 1

        Information

        ID
        1
        Time
        1000ms
        Memory
        512MiB
        Difficulty
        5
        Tags
        # Submissions
        147
        Accepted
        58
        Uploaded By