2 solutions
-
3
ysh牛逼
```cpp #include<bits/stdc++.h> using namespace std; const int N=1e5+10; struct yshnb{ int begin; int end; }dsjnb[N]; bool cmp(yshnb &a,yshnb&b) { return a.end < b.end; } int main() { int n; cin>>n; int index=0; while(n--) { int l,r; cin>>l>>r; dsjnb[index++]={l,r}; } sort(dsjnb,dsjnb+index,cmp); int last_end=dsjnb[0].end; int cnt=1; for(int i=1;i<index;i++) { int p=dsjnb[i].begin; int q=dsjnb[i].end; if(last_end<=p) { cnt++; last_end=q; } } cout<<cnt<<"\n"; return 0; } -
2
P1001 67的活动
一.解题思路
1.碎碎念
读完题发现是一道很典型的贪心题,但是秉承着能暴力绝不多想的不信邪精神(说不定社长给的测试集很小,范围只是吓唬人呢),还是随手写了个漏洞百出的暴力试了一下,看到两个TLE就放心了 (题解如果帮助到你的话可以点个赞嘛✨)
2.题目分析
重新回到题目,意思很简单,就是找出能在同一时间里完成的最多活动
因为每个活动都是一分,所以核心就是每次优先选择结束时间最早的活动(结束时间越早,剩余时间越长,能够参加更多活动)
3.算法实现
1.将所有活动按照结束时间排序(核心重点)
2.当前时间记录为**-1**(范围是0<=L<R,所以不能0)
3.遍历排序后所有活动,合法(时间不冲突)就选上
4.更新当前时间
4.复杂度
1.时间:O(nlogn)
2.空间:O(n)
二.完整代码

PS:非专业题解!有任何错误记得联系我!!!
- 1
Information
- ID
- 2
- Time
- 1000ms
- Memory
- 256MiB
- Difficulty
- 2
- Tags
- # Submissions
- 37
- Accepted
- 18
- Uploaded By