zoukankan      html  css  js  c++  java
  • hdu 1113

    地址:http://acm.hdu.edu.cn/showproblem.php?pid=1113

    题意:给一堆单词做字典,XXXXXX结束。然后给若干个单词,输出它和字典里哪些单词由同样的字母(个数也相同)组成,有多组的话按字典序输出。XXXXXX结束。

    mark:题意有点绕。。。思路是先把字典里的单词排序,并且每个单词计算一个值val。这个val是把单词的字母排序以后hash得到的,范围是26^6也就是3亿多一点,可以用int来表示。这样接下来每个单词输入的时候,只要比对字典里的val,相同则可以输出。不hash的话就多存一个字母排序以后的单词也可以。

    代码:

    # include <stdio.h>
    # include <string.h>
    # include <stdlib.h>


    typedef struct NODE{
    char str[10] ;
    int len, val ;
    }NODE ;


    NODE dp[110] ;


    int scmp(const void *a, const void *b)
    {
    return *(char*)a - *(char*)b ;
    }


    int calc(char *str, int len)
    {
    int rtn = 0 ;
    qsort(str, len, 1, scmp) ;
    while (len--)
    {
    rtn = rtn * 27 + str[0] ;
    str++ ;
    }
    return rtn ;
    }


    int cmp( const void *a, const void *b)
    {
    NODE *p = (NODE*)a, *q = (NODE*) b ;
    return strcmp(p->str, q->str) ;
    }


    int main ()
    {
    int n, i = 0, flag ;
    char str[10] ;

    while (gets(str) && strcmp(str, "XXXXXX"))
    {
    strcpy (dp[i].str, str) ;
    dp[i].len = strlen(str) ;
    dp[i].val = calc(str, dp[i].len) ;
    i++ ;
    }
    n = i ;
    qsort(dp, n, sizeof(NODE), cmp) ;
    while (gets(str) && strcmp(str, "XXXXXX"))
    {
    flag = 0 ;
    for (i = 0 ; i < n ; i++)
    {
    if (strlen(str) == dp[i].len &&
    calc(str, dp[i].len) == dp[i].val)
    {
    puts (dp[i].str) ;
    flag = 1 ;
    }
    }
    if (flag == 0) puts ("NOT A VALID WORD") ;
    puts ("******") ;
    }
    return 0 ;
    }



  • 相关阅读:
    Python统计nginx日志域名下载量
    如何使用MySQL自动化备份脚本添加备份任务
    迁移数据库报错
    cobbler
    Zabbix添加nginx-php监控
    Zookeeper运维问题集锦
    Jira+Wiki配置手册
    Gitlab安装恢复手册
    Glusterfs配置手册
    k8s的认证-RBAC机制
  • 原文地址:https://www.cnblogs.com/lzsz1212/p/2336425.html
Copyright © 2011-2022 走看看