zoukankan      html  css  js  c++  java
  • 【洛谷p1781】宇宙总统

    宇宙总统【题目链接】

    关于题目算法,其实就是考排序,那我们直接sort不就好啦,显然不能。

    这个题让我重新认识了cmp函数;


    以下是我的心路历程:

    看到这个题,嗯?这么简单的吗,我直接sort不就好啦✿✿ヽ(°▽°)ノ✿

    再看一眼,不会这么简单的吧(⊙▽⊙)#

    往下一看:(微笑)


    废话 is over

    MY SOLUTION:

    这个题其实开始是想手写高精度排序的,好像手写排序也不是特别难?然后在讨论版发现了一个用sort的算法,于是我也就用sort做啦,然后成功对sort函数中的cmp有了新的认识:

    1. 首先当然是读入啦,结构体读入,方便排序;
    2. 然后sort(p+1,p+n+1,cmp)
    3. 接下来就是响当当的cmp函数啦:
      1. 首先这让人忍不住想起了【6.12校内test】T3 城市交通费中的cmp:
        int cmp(int x,int y)
        {
            return p[x]<p[y];
        }

        内心os:还可以这么玩qwq(这里是给出两个下标x,y,按它们的繁华度从小到大排序)

      2. 从网上并没有找到有关cmp是怎么用的,只找到一句话:cmp函数的含义:如果返回值是 True,表示 要把 序列 (X,Y),X放Y前。(这是我感觉唯一有用的qwq)对于这种:
        bool cmp(int x,int y){
                return x>y;
        }

        的cmp,其实就是比较x与y如果x>y return 1;否则 return 0;

      3. 那么按照这个思想,我们可以开始编写我们的cmp了:首先求这两个字符串的长度(因为我用的char型所以是用strlen(n))比较两个串的长度,如果strlen(x)>strlen(y)(但是好像不能直接写if(strlen(x)>strlen(y)))return 1;表示把x放在y前,反之return 0;然后当这两个字符串长度相同时,我们运用一个神奇的函数strcmp——字符串比较函数;strcmp(字符串1,字符串2) 如果字符串1>字符串2,会返回一个大于0的数,如果字符串1<字符串2,会返回一个小于0的数,如果字符串1=字符串2,返回0;因此我们可以写完程序啦(不想解释啦我相信后面是很好理解的)

    CODE:

    #include<bits/stdc++.h>
    #include<string>
    #include<algorithm>
    
    using namespace std;
    
    int n;
    struct node{
        int num;
        char a[100];
    }p[21];
    
    bool cmp(node x,node y){
        int xx=strlen(x.a),yy=strlen(y.a);
        if(xx>yy) return 1;
        if(xx<yy) return 0;
        if(strcmp(x.a,y.a)<0) return 0;
        return 1;
    }
    
    int main(){
        scanf("%d",&n);
        for(int i=1;i<=n;i++)
          cin>>p[i].a,p[i].num=i;
        sort(p+1,p+n+1,cmp);
        cout<<p[1].num<<endl<<p[1].a<<endl;
    }

     想手写一个字符串比较函数qwq

    算了懒死啦(主要没有搞明白传值调用和传址调用然后不会写)

  • 相关阅读:
    C语言内存分析
    算法之快速排序
    单链表逆转
    C程序设计语言之一
    vim插件配置(一)
    makefile示例
    cocos2d基础入门
    Makefile
    Makefile
    GCC编译四阶段
  • 原文地址:https://www.cnblogs.com/zhuier-xquan/p/11016734.html
Copyright © 2011-2022 走看看