zoukankan      html  css  js  c++  java
  • POJ1002

    来源:http://poj.org/problem?id=1002&lang=zh-CN

    这题用C++的string来写真的很蛋疼,效率低不说,输入输出真的麻烦。由此看出,C++的STL效率不行,不过除非是那种特别卡时的题,一般STL还是不错的。

    这是C++的代码:

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <string>
    #include <algorithm>
    using namespace std;
    
    int dd[]={2,2,2,3,3,3,
        4,4,4,5,5,5,6,6,6,
        7,0,7,7,8,8,8,9,9,9,0};
    
    string s[100005];
    int f[100005]={0};
    bool flag=true;
    
    void print(string s,int x)
    {
        s.insert(3,"-",1);  //这里用insert函数效率太低,不过我懒得写循环输出
        cout<<s<<" "<<x<<endl;
        flag=false;
    }
    
    int main()
    {
        char ss[20];
        int n;
        scanf("%d\n",&n);   //这里一定要加换行符\n,不加肯定错
        for (int i=1;i<=n;i++)
        {
            s[i].clear();
            gets(ss);
            for (int j=0;ss[j];j++)
                if (ss[j]>='A' && ss[j]<='Z') s[i]+=dd[ss[j]-'A']+'0';
                else if (ss[j]!='-') s[i]+=ss[j];
        }
        sort(s+1,s+n+1);
    
        int x=1;
        
        string temp=s[1];
        for (int i=2;i<=n;i++)
        {
            if (s[i]==temp) x++;
            else {
                if (x>1) print(temp,x);
                x=1; temp=s[i];
            }
        }
        if (s[n]==s[n-1]) print(s[n],x);
        if (flag) printf("No duplicates.\n");
        return 0;
    }

    下面的是我早些时候写的pascal代码,效率还可以:

    program eee;
    const
      a:array['A'..'Z'] of char=('2','2','2','3','3','3','4','4','4','5','5','5',
                                 '6','6','6','7','0','7','7','8','8','8','9','9','9',
                                 '0');
    var
    n,i,j,k,l:longint;
    d:array[0..100001] of string;
    s:string;
    flag:boolean;
    
    procedure sort(l,r:longint);
    var
    i,j:longint;
    k,x:string;
    begin
      i:=l; j:=r; k:=d[(l+r) div 2];
      repeat
        while d[i]<k do inc(i);
        while d[j]>k do dec(j);
        if i<=j then
        begin
          x:=d[i]; d[i]:=d[j]; d[j]:=x;
          inc(i); dec(j);
        end;
      until i>j;
      if i<r then sort(i,r);
      if l<j then sort(l,j);
    end;
    
    begin
      readln(n);
      for i:=1 to n do
      begin
        readln(d[i]);
        s:='';
        for j:=1 to length(d[i]) do
        begin
          if d[i,j] in ['A'..'Z'] then s:=s+a[d[i,j]]
          else if d[i,j] in ['0'..'9'] then s:=s+d[i,j];
        end;
        insert('-',s,4);
        d[i]:=s;
      end;
      sort(1,n);
      flag:=true;
      s:=d[1]; k:=1;
      for i:=2 to n do
      begin
        if (d[i]<>s) and (k>1) then begin flag:=false; writeln(s,' ',k); s:=d[i]; k:=1; end
        else if d[i]<>s then s:=d[i]
        else inc(k);
      end;
      if d[n]=d[n-1] then begin writeln(d[n],' ',k); flag:=false; end;
      if flag then writeln('No duplicates.');
    end.
  • 相关阅读:
    UI和3D物体的堆叠响应
    UI中的事件系统EventSystem
    UI的管理
    学习笔记--2020年12月30日
    Java集合框架
    Java基本数据类型
    数据存储
    intent和手势探测
    即时消息Toast和对话框
    Android事件处理的三种方法
  • 原文地址:https://www.cnblogs.com/ay27/p/2813364.html
Copyright © 2011-2022 走看看