这情况怎样快排?玄关

P1068 [NOIP2009 普及组] 分数线划定

这样: ```cpp #include<bits/stdc++.h> using namespace std; struct fan{ int k,s; }; bool cnt(const fan &a,const fan &b){ return a.k>b.k; } int main() { int n,m,sum; fan a[5010]; cin>>n>>m; for(int i=1;i<=n;i++){ cin>>a[i].k>>a[i].s; } sort(a,a+n,cnt); sum=(int)m*1.5; for(int i=1;i<=sum;i++){ cout<<a[i].k<<' '<<a[i].s<<endl; } return 0; } ```
by maokaiyu @ 2024-03-17 10:58:35


@[lucy2012](/user/1252442) 首先对于结构体你要按照你自己需要的排序来写比较函数,或者重构小于运算符。sort跟的是头与尾的指针,不是值。
by maokaiyu @ 2024-03-17 11:00:03


@[lucy2012](/user/1252442) 我的排序方式并没有按照题意,你自己改吧。
by maokaiyu @ 2024-03-17 11:01:38


@[lucy2012](/user/1252442) 在吗
by maokaiyu @ 2024-03-17 11:07:04


@[maokaiyu](/user/1293596) 谢谢!刚刚没看到
by lucy2012 @ 2024-03-17 11:24:22


@[maokaiyu](/user/1293596) 这样是不是只换了一部分?可不可以再调下QAQ ```cpp #include<bits/stdc++.h> using namespace std; struct fan{ int k,s; }; bool cnt(const fan &a,const fan &b){ return a.s>b.s; } int main() { int n,m,sum,sum1; fan a[5010]; cin>>n>>m; for(int i=1;i<=n;i++) cin>>a[i].k>>a[i].s; sort(a,a+n,cnt); sum=(int)m*1.5; sum1=a[sum].s; for(int i=1;i<=sum;i++){ if(a[i].s<sum1) break; cout<<a[i].k<<' '<<a[i].s<<endl; } return 0; } ```
by lucy2012 @ 2024-03-17 11:33:43


@[lucy2012](/user/1252442) 你没考虑 $s$ 一样的情况
by maokaiyu @ 2024-03-17 11:35:06


@[maokaiyu](/user/1293596) 应该还有其他的问题吧,s一样会影响排序吗?(不知道怎么改
by lucy2012 @ 2024-03-17 12:12:13


@[lucy2012](/user/1252442) 以及 $m$ 不应该乘 $1.5$ 应该是排完序的$a[m].s * 1.5$。
by maokaiyu @ 2024-03-17 12:16:51


@[maokaiyu](/user/1293596) ```cpp #include<bits/stdc++.h> using namespace std; struct fan{ int k,s; }; bool cnt(const fan &a,const fan &b){ return a.s>b.s; } int main() { int n,m,sum; fan a[5010]; cin>>n>>m; for(int i=1;i<=n;i++){ cin>>a[i].k>>a[i].s; } sort(a,a+n,cnt); sum=(int)a[m].s*1.5; for(int i=1;i<=sum;i++){ cout<<a[i].k<<' '<<a[i].s<<endl; } return 0; } ``` 这样吗
by lucy2012 @ 2024-03-20 19:00:54


| 下一页