摘要:
250pt简单题,但很容易错。正确率只有19%题意:某国正进行选举,选民有10000,不投票和多投票都算作弊。给定n个候选者的四舍 五入后的得票率,求是否有人在作弊。算法:贪心分析:求10000是否能组成该投票结果的所需最小人数和最大人数写的时候只考虑小数点后一位,相当于考虑1000,10000人的话应该是小数点后两位500pt当时想到了,却证明不了也就不敢做,,后来还是不知道怎么证明ADD:因为胶水可以无限使用,无论怎么切,只要切得次数一定,剩余的废料拼成的木板的长度也就一定题意:需要dc块长度为dl的木板,在需要长度为al的木板最少的条件下,求切割的最少次数,可用胶水粘合切下来的木板合成所 阅读全文
摘要:
题意:给定一个表达式,去除所有能去掉的括号分析:因为是表达式,所以想套用LR(1)分析法和分解表达式,一步一步手动模拟去括号,结果总是拆东墙补西墙,搞不出来。三天后看解题报告,标程是通过加括号来解决的,构造一颗二叉树,去掉所有括号,叶子是变量,非叶子其他的节点是运算符,节点的深度和他所在的括号数相同,由于*和/的计算优先级比加和减高,所以当非叶子节点的运算符的优先级比孩子节点的高时,必须通过加括号来维护pascal的标程是错(虽然它的文件名已经含有bug的单词,但是错的怎么能放到标程里!),有两处错误,我都发现过,可都只改了一处来测试,耗了一个下午,看到java版的编程才恍然大悟,不自信啊!第 阅读全文
摘要:
题意:一张CD上有n首频率为f[i],长度为了l[i]的曲子,因为CD不能随机播放曲子,想播放第i首时,必须依次播放前i-1,b[i]=f[i]*(a[1]+...+a[i]),sum=b[1]+..+b[n],求使sum最小的歌曲排列方式。分析:因为1<=n<=2^16,时效只可能是O(nlogn)或O(n),一开始以为是按频率排序,发现测试数据都过不了。若已得到最优排列,使最优值为mb[i+1]+b[i]=f[i+1]*l[i]+(f[i+1]+f[i])*(l[1]+...+l[i-1])+f[i+1]*l[i+1]+f[i]*l[i];若交换f[i]*l[i+1]+(f[i 阅读全文
摘要:
数据量比较大的并查集一开始一直RE,提取字符串中的整数时出错了,换种方法就AC了思路:路径压缩的并查集一个小优化(766ms)挤进第一版:合并集合的时候始终以把较大的数的集合并到较小的数的集合#include<cstdio>#include<ctype.h>#include<algorithm>#define MAXN 6000010using namespace std;int set[MAXN];int Find(int x){ if(x==set[x]) return x; set[x]=Find(set[x]); return set[x];}voi 阅读全文
摘要:
模式搜索?:匹配任何字符*:匹配任意个字符,包括零个建立模式串的字典树,用并查集合并相同模式串查询的时候深搜任何可能#include<cstdio>#include<algorithm>#include<cstring>#define MAXN 100010using namespace std;int n,m;struct Trie{ int i; Trie *a[28];};Trie root;char p[7],s[22];int set[MAXN];bool mat[MAXN];void Insert(Trie *rt,int k,int j){ i 阅读全文