现在的位置: 首页 > 综合 > 正文

poj1002

2014年01月25日 ⁄ 综合 ⁄ 共 868字 ⁄ 字号 评论关闭

链接http://poj.org/problem?id=1002

一道水题,之前把电话号码转化成string,用map来做,TLE了,直接用数字做A了

#include<cstdio>
#include<algorithm>
#include<iostream>
using namespace std;
#define MAX 100010
int num[MAX];
char str[100];
int map[100];
int main() {
   freopen("poj1002.txt", "r", stdin);
   for(int i = 0; i < 10; ++ i) {
      map[i + '0'] = i;
   }
   map['A'] = map['B'] = map['C'] = 2;
   map['D'] = map['E'] = map['F'] = 3;
   map['G'] = map['H'] = map['I'] = 4;
   map['J'] = map['K'] = map['L'] = 5;
   map['M'] = map['N'] = map['O'] = 6;
   map['P'] = map['R'] = map['S'] = 7;
   map['T'] = map['U'] = map['V'] = 8;
   map['W'] = map['X'] = map['Y'] = 9;
   int n, sum;
   scanf("%d", &n);
   for(int k = 0; k < n; ++ k) {
      scanf("%s", str);
      sum = 0;
      for(int i = 0; str[i] != '\0'; ++ i) {
         if(str[i] == '-') {
            continue;
         }
         sum = sum*10 + map[str[i]];
      }
      num[k] = sum;
   }
   sort(num, num + n);
   bool flag = true;
   int cnt;
   for(int i = 0; i < n; ++ i) {
      cnt = 1;
      while(i + 1 < n && num[i] == num[i+1]) {
         i++;
         cnt++;
      }
      if(cnt != 1){
         printf("%03d-%04d %d\n", num[i-1]/10000, num[i-1]%10000, cnt);
         flag = false;
      }
   }
   if(flag) {
      printf("No duplicates. \n");
   }
   return 0;
}

抱歉!评论已关闭.