摘要:
1004UnitFractionPartition(POJ1980)解题思路:DFS+剪枝。这题的剪枝条件还是比较严格的,很容易超时,我想到的需要剪枝的情况有以下几点:①前几项的和超过了最大值。②前几项的积超过了最大值。③深度超出。④提前“预测”剪枝:即如果剩余的项数乘以当前最小分数要大于剩余的值,则不应该往下搜索。第④点是至关重要的,没有考虑到的话一般会超时。还有可以优化的地方就是避免用实数类型,一是精度难以把握,而是实数运算相对整数运算要慢。代码如下:#include <cstdlib>#include <iostream>using namespace std;i 阅读全文
摘要:
1003TheEmbarrassedCryptographer(POJ2635)解题思路:高精度求模+同余模定理+素数打表。注意以下几点:①素数表不能只打到10^6,必须保证素数表中的最后一个大于10^6。②读入大数后用千进制(或万进制,十万进制……),用十进制可能会超时。代码如下:#include <cstdlib>#include <iostream>using namespace std;char key[105];int keyLen = 0;int num[105];int numLen = 0;int primes[1000005];int cnt = 0; 阅读全文
摘要:
1002Babelfish(POJ2503)解题思路:字符串的哈希,找一个比较好的hash函数就可以了,冲突时用链表的形式组织。用STL中的map等容器也可以过,不过性能差点。代码如下:#include <cstdlib>#include <iostream>using namespace std;#define N 1000005#define HASH 3999971struct node{ char a[11]; char b[11]; int next;};struct node words[N];int head[HASH];int t = 0;int inl 阅读全文
摘要:
1001BasicallySpeaking(POJ1546)基本思路:基本的进制转换,先转化成十进制再转化成目标进制即可。代码如下: 1 #include <cstdlib> 2 #include <iostream> 3 #include <cmath> 4 5 using namespace std; 6 7 int a = 0; 8 int b = 0; 9 char aNum[10];10 char bNum[10];11 12 void solve()13 {14 int i = 7;15 int j = 0;16 int ans = 0;17 i 阅读全文