zoukankan      html  css  js  c++  java
  • 洛谷 1012 拼数(NOIp1998提高组)

    【题解】  

      我们要做的就是把这些数排序。排序的时候判断两个数是否交换的方法,就是把这两个数相接形成两个长度相同的数字,比较这两个数字的大小。

     1 #include<cstdio>
     2 #include<algorithm>
     3 #include<cstring>
     4 #define N 200010
     5 #define rg register
     6 #define LL long long
     7 using namespace std;
     8 int n,m;
     9 char s[N][200];
    10 inline int read(){
    11     int k=0,f=1; char c=getchar();
    12     while(c<'0'||c>'9')c=='-'&&(f=-1),c=getchar();
    13     while('0'<=c&&c<='9')k=k*10+c-'0',c=getchar();
    14     return k*f;
    15 }
    16 inline bool check(int x,int y){
    17     char a[200],b[200];
    18     int l1=strlen(s[x]+1),l2=strlen(s[y]+1),l=l1+l2;
    19     for(rg int i=1;i<=l1;i++) a[i]=s[x][i],b[i+l2]=s[x][i];
    20     for(rg int i=1;i<=l2;i++) b[i]=s[y][i],a[i+l1]=s[y][i];
    21     for(rg int i=1;i<=l;i++){
    22         if(a[i]>b[i]) return 1;
    23         else if(a[i]<b[i]) return 0;
    24     }
    25     return 1;
    26 }
    27 int main(){
    28     n=read();
    29     for(rg int i=1;i<=n;i++) scanf("%s",s[i]+1);
    30     for(rg int i=1;i<n;i++)
    31         for(rg int j=i+1;j<=n;j++) if(!check(i,j)) swap(s[i],s[j]);
    32     for(rg int i=1;i<=n;i++) printf("%s",s[i]+1);
    33     puts("");
    34     return 0;
    35 }
    View Code
  • 相关阅读:
    存在和本质
    数据库的日志机制
    【msql】关于redo 和 undo log
    乐观锁是基于比较的无锁并发控制机制
    两段锁协议和防止死锁的一次封锁法
    并发编程沉思录
    什么是B-Tree
    二叉树与b树的性能区别:计算、层级与io
    认知模型
    复杂性、认知与心理学
  • 原文地址:https://www.cnblogs.com/DriverLao/p/9399965.html
Copyright © 2011-2022 走看看