对于给定的一串数字,看看是否有数字是其他数字的前缀。
HASH把每一个数字的前缀和数字本身都转换成对应的数字保存到一个数组,排序为非递减序列,之后用对每一个数字进行二分查找,如果能够找到并且找到的数字大于等于2.则输出No,当全部数字都被判断完,并且全部不是其他字符前缀则输出Yes,当字符形式输入,处理0为开始情况。
HASH:
#include <stdio.h>
#include <iostream>
#include <algorithm>
#include <string.h>
using namespace std;
unsigned long long int base = 3771;
unsigned long long int mod = 3777999933311371397;
unsigned long long int a[10000001], cnt = 0, flag, len = 0, d[100001];
char c[100005][11];
int serch(int i, int l, int r, unsigned long long int ans)
{
int mid = (l + r) >> 1, num = 0, m = 0;
while (l < r)
{
mid = (l + r) >> 1;
if (a[mid] == ans)
{
if (mid - 1 >= 0 && a[mid] == a[mid - 1])
{
num++;
}
if (mid + 1 <= r && a[mid] == a[mid + 1])
{
num++;
}
if (num >= 1)
{
m = 1