摘要:
UVA_11198 这个题目是个隐式图搜索的题目,可以把数值和符号分别存在两个数组里面,然后进行广搜即可。#include<stdio.h>#include<string.h>int st[50000][8],sign[50000][8],dis[50000];int head[1000003],next[50000];int target[8]={1,2,3,4,5,6,7,8};int isprime(int n){ int i; for(i=2;i<n;i++) if(n%i==0) return 0; return 1;}int h... 阅读全文
摘要:
UVA_11218 这个题目可以直接用回溯解决。#include<stdio.h>#include<string.h>int n,A[10],ans;int a[100],b[100],c[100],s[100];void dfs(int cur,int complete,int score){ int i; if(complete==3) { if(score>ans) ans=score; return; } for(i=cur;i<n;i++) if(!A[a[i]]&&!A[b[i]]&&!A... 阅读全文
摘要:
UVA_10887要不是在一个网站上看到了输入字符串可能为空的这一提示,我估计我又要郁闷死了……#include<stdio.h>#include<string.h>int head[10000017],next[3000000];char st[3000000][25],b[25];int hash(char *str){ int seed=31,v=0; while(*str) { v=v*seed+*(str++); } return (v&0x7FFFFFFF)%10000017;}int insert(int s){ int ... 阅读全文
摘要:
UVA_10391我终于会用字符串的哈希函数之一了……在这个哈希函数里面v&0x7FFFFFFF是为了保证v总是正的,这一点我们把16进制数写成2进制数就能很明显的看出来了,但这是v的范围仍然和int的正数范围一样大,为了节约存储空间我们可以最后让v模一个大素数,一般可以选1000003和10000019。此外这个题目如果我们判断两个字符串合成的新字符串是否出现过,这样复杂度会比较高(n^2),我们不如去判断一个字符串拆成的两半是否都出现过,这样复杂度是n*m,其中m约是字符串的平均长度。#include<stdio.h>#include<string.h>#i 阅读全文