• 洛谷题单算法【1-x】


     [NOIP2007 普及组] 奖学金

     

    这道题虽然我想到了和结构体,但没见过比较那么多的,一时间绷住了qwq(基础果然还要多练练)

    1. #include
    2. using namespace std;
    3. int n;
    4. struct stu{
    5. int cn, en, ma;
    6. int num;
    7. int sum;
    8. }st[310];
    9. bool cmp(stu a, stu b){
    10. if(a.sum > b.sum) return 1;
    11. else if(a.sum == b.sum && a.cn > b.cn) return 1;
    12. else if(a.sum == b.sum && a.cn == b.cn && a.num < b.num) return 1;
    13. else return 0;
    14. }
    15. int main(){
    16. cin >> n;
    17. for(int i = 1; i <= n; i ++ ){
    18. cin >> st[i].cn >> st[i].ma >> st[i].en;
    19. st[i].num = i;
    20. st[i].sum = st[i].cn + st[i].ma + st[i].en;
    21. }
    22. sort(st + 1, st + 1 + n, cmp);
    23. for(int i = 1; i <= 5; i ++ ){
    24. cout << st[i].num << " " << st[i].sum << endl;
    25. }
    26. return 0;
    27. }

    P1012 [NOIP1998 提高组] 拼数 

    1. #include
    2. using namespace std;
    3. int n;
    4. string s[25];
    5. bool cmp(const string &a, const string &b){
    6. return a + b > b + a;
    7. }
    8. int main(){
    9. cin >> n;
    10. for(int i = 0; i < n; i ++ ) cin >> s[i];
    11. sort(s, s + n, cmp);
    12. for(int i = 0; i < n; i ++ ) cout << s[i];
    13. return 0;
    14. }

    P1923 【深基9.例4】求第 k 小的数 

     woc这道题掉坑里了,题目求的是第k小的数不是排好序后第k个数

    按样例来分析,已知最小的数是第0小,如果求的是第1小的数, 【1 2 3 4 5】数列中第1小的数应该是2,第k个数应该是1, 所以在输入k后要自加1

    1. #include
    2. using namespace std;
    3. const int N = 5e6 + 10;
    4. int a[N];
    5. int n, k;
    6. int quick_select(int a[], int l, int r, int k){
    7. if(l >= r) return a[l];
    8. int i = l - 1, j = r + 1, x = a[l + r >> 1];
    9. while(i < j){
    10. do i ++ ; while(a[i] < x);
    11. do j -- ; while(a[j] > x);
    12. if(i < j) swap(a[i], a[j]);
    13. }
    14. if(k <= j - l + 1) quick_select(a, l, j, k);
    15. else quick_select(a, j + 1, r, k - (j - l + 1));
    16. }
    17. int main(){
    18. ios::sync_with_stdio(false);
    19. cin.tie(0), cout.tie(0);
    20. cin >> n >> k;
    21. k ++ ;
    22. for(int i = 0; i < n; i ++ ) cin >> a[i];
    23. cout << quick_select(a, 0, n - 1, k)<< endl;
    24. return 0;
    25. }

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

    1. #include
    2. using namespace std;
    3. const int N = 5010;
    4. int n, m;
    5. struct stu{
    6. int num, score;
    7. }st[N];
    8. bool cmp(stu a, stu b){
    9. if(a.score > b.score) return true;
    10. else if(a.score == b.score && a.num < b.num) return true;
    11. else return false;
    12. }
    13. int main(){
    14. cin >> n >> m;
    15. for(int i = 1; i <= n; i ++ ) cin >> st[i].num >> st[i].score;
    16. sort(st + 1, st + 1 + n, cmp);
    17. m = m * 1.5;
    18. int level = st[m].score;
    19. int cnt = m;
    20. for(int i = m + 1; i <= n && st[i].score == level; i ++ ){
    21. cnt ++ ;
    22. }
    23. cout << level << " " << cnt << endl;
    24. for(int i = 1; i <= cnt; i ++ ){
    25. cout << st[i].num << " " << st[i].score << endl;
    26. }
    27. return 0;
    28. }

    P1781 宇宙总统 

     

     

    这题a.sum.size() 的做法好骚啊 难绷

    1. #include
    2. using namespace std;
    3. int n;
    4. struct stu{
    5. int num;
    6. string sum;
    7. }s[25];
    8. bool cmp(stu a, stu b){
    9. if(a.sum.size() > b.sum.size()) return true;
    10. else if(a.sum.size() == b.sum.size() && a.sum > b.sum) return true;
    11. else return false;
    12. }
    13. int main(){
    14. cin >> n;
    15. for(int i = 1; i <= n; i ++ ){
    16. cin >> s[i].sum;
    17. s[i].num = i;
    18. }
    19. sort(s + 1, s + 1 + n, cmp);
    20. cout << s[1].num << endl;
    21. cout << s[1].sum << endl;
    22. return 0;
    23. }

  • 相关阅读:
    【ROS2原理12】Python接口数据
    MLIR笔记(2)
    使用kettle进行数据的多表关联
    【算法竞赛入门练习题】统计一个输入的字符串中出现某子串的个数 以及 求一个字符串中的最大等值子串
    如何提高webpack的构建速度?
    【生成式网络】入门篇(五):Pix2Pix 的 代码和结果记录
    java医用物资信息管理系统 ssm
    云中网络的隔离GRE&VXLAN
    SSM SpringBoot vue限房摇号系统
    数据结构和算法之二分法查找
  • 原文地址:https://blog.csdn.net/weixin_63914060/article/details/126342657