Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1562282
  • 博文数量: 327
  • 博客积分: 10000
  • 博客等级: 上将
  • 技术积分: 3556
  • 用 户 组: 普通用户
  • 注册时间: 2005-04-05 21:28
个人简介

东黑布衣,流浪幽燕。 真诚善良,值得信赖。

文章分类

全部博文(327)

我的朋友

分类: BSD

2007-02-08 19:39:34

描述

在英文中有很多逆序的单词,比如dog和god,evil和live等等。

现在给出一份包含N个单词的单词表,其中每个单词只出现一次,请你找出其中有多少对逆序单词。

输入

第1行:1个整数,N,表示单词数量。2≤N≤50,000。

第2..N+1行:每行1个单词,只包含小写字母,每个单词长度不超过16个字母。保证每个单词只出现一次,且不会出现回文单词(即一个单词倒序还是它自己,比如eye)。

输出

第1行:1个整数,表示单词表中逆序单词的对数。

样例输入
6
dog
live
hiho
evil
coder
god
样例输出
2



  1. //hiho1366
  2. #include "stdafx.h"
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5. #include <string.h>

  6. #define ALTN 26
  7. char op[20];

  8. typedef struct _Node{
  9.    int flag;
  10.    struct _Node *nxt[ALTN];
  11. }Node;

  12. Node *root;

  13. void init_node(Node *tmp)
  14. {
  15.    int i;
  16.    for(i=0;i<ALTN;i++){
  17.       tmp->nxt[i]=NULL;
  18.       tmp->flag=0;
  19.    }
  20. }

  21. void insert_node(char *s)
  22. {
  23.    Node* tNode;
  24.    int i;
  25.    int to;
  26.    int len=strlen(s);
  27.    Node *now=root;
  28.    for(i=len-1;i>=0;i--){
  29.       to=s[i]-'a';
  30.       if(now->nxt[to] == NULL){
  31.          tNode=(Node*)malloc(sizeof(Node));
  32.          init_node(tNode);
  33.          now->nxt[to] = tNode;
  34.       }
  35.       now=now->nxt[to];
  36.    }
  37.    now->flag++;
  38. }

  39. int fid(char *s)/* find in dictionary */
  40. {
  41.    int len=strlen(s);
  42.    int i;
  43.    int to;
  44.    Node *now=root;
  45.    for(i=0;i<len;i++){
  46.       to=s[i]-'a';
  47.       if(now->nxt[to]==NULL)
  48.          return 0;
  49.       now=now->nxt[to];
  50.    }
  51.    return now->flag;
  52. }

  53. int main(int argc, char* argv[])
  54. {
  55.    int n;
  56.    if(NULL==freopen("hihocoder1366i.txt","r",stdin))
  57.       return -1;

  58.    root = (Node *)malloc(sizeof(Node));/*开始我把这两行放外面, 编译错误*/
  59.    init_node(root);/*函数调用不能放在外部的, 否则会被认为是重复定义*/

  60.    int ans=0;
  61.    scanf("%d", &n);
  62.    //getchar();//什么用不清楚
  63.    for(int i=0;i<n;i++){
  64.       scanf("%s",op);/*读入字符串*/

  65.       ans+=fid(op);/*正序查询字符串*/

  66.       insert_node(op);/*逆序插入字符串*/

  67.       memset(op,0,sizeof(op));
  68.    }
  69.    printf("%d\n",ans);
  70.    return 0;
  71. }


  1. 在VS2005中生成时出错:error C4430: missing type specifier - int assumed. Note: C++ does not support default-int

  2. 这是因为在VC6中,如果没有显示的指定返回值类型,编译器将其视为默认整型。但是vs2005不支持默认整型。

  3. 解决方法如下:
  4. 打开:项目----项目属性----配置属性----C/C++----命令行,在附加选项那里添加/wd4430这个选项。




第一绿茶;第二红葡萄酒;第三豆浆;第四酸奶;第五骨头汤;第六蘑菇汤。
 
这是我以前的写的,现在我要说最好的饮品不是别的, 而是最普通的白开水。

“大羹无味,实则至味”——2012-07-31


阅读(1721) | 评论(3) | 转发(0) |
给主人留下些什么吧!~~

zhln2018-04-10 23:23:35

2018-04-10 编辑修正。