比赛地址:http://acm.hust.edu.cn:8080/judge/contest/contest/view.action?cid=9590#overview
今天二逼了。。C题没拍出来。。浪费了很久的时间,队友10+分钟就搞定了。影响了推进的速度;
今天过了9题。。总体来说,这些题难度不是很高。。队伍今天在k卡得有些久。。感觉大家那段时间效率太低了。也没有很好的读其他的题目的意思。。最终发现没过D很水。。
还好。。。队伍有起色了。。希望成长更快些吧。
Problem A | UVA 11888 | |
Problem B | UVA 11889 | Benefit |
Problem C | UVA 11890 | Calculus Simplified |
Problem D | UVA 11891 | Deep in Jungles |
Problem E | UVA 11892 | ENimEN |
Problem F | UVA 11893 | Fabulous DAGy |
Problem G | UVA 11894 | Genius MJ |
Problem H | UVA 11895 | Honorary Tickets |
Problem I | UVA 11896 | Inglorious Gangs |
Problem J | UVA 11897 | Jingling Dominoes |
Problem K | UVA 11898 | Killer Problem |
A : 一个字符串,判断是否能够由两个回文串构成或者一个回文串。。
这题比较裸。。。O(n)的求每个位置的回文串。。
算法详细见http://acm.uestc.edu.cn/bbs/read.php?tid=3258
B:已经Lcm(A,B)=C,告诉你A,C,求最小的B
设 D=C/A。 答案最好的情况就是D。现在分析D不行的情况。。。如果D与A有最大公约数不为1,那么Lcm(D,A)一定就小于C。。。比如 D=2^k1,A=2^k2....要消除A对D的影响。。。那么必须去2^(k1+k2),这样去掉与A相同的部分还剩下D。。。因此结论:对D=p1^k1 * p2^k2…… ; B=p1^K1 * p2^K2 (其中Ki为C中对应的指数)
C:一个表达式,只含“+”,“-”,未知数用‘x’表示。。。给出每个未知数的值,安排一种分配。使得表达式计算的结果最大
分别统计符号位为‘+’,‘-’的未知数有多少个。。然后用从大到小先用‘+’,再用‘-’
D:n个点,给出位置以及该点的货物重量,安排集中点,每个集中点所含的货物数量为K(K<=100),求出在集中点数目最小的情况下,代价是最小是多少(代价为货物重量*到集中点的距离)
这题因为K很小。。所有可以进行dp
dp[i] = min(dp[k-1] +[ k, i ] ) 关键是求[k,i]的代价。。
假设 [ k, i ]的最优集中点在 t,那么 [k-1, i]的最优集中点在 t'<=t(这里满足单调性)..因此可以递推搞定。。
sum[i]:前i个货物的重量总和
s记录[k,i]合并代价, t记录集中点设置的位置
[i , i] 初始 s=0,t=i;
对于[ k,i ] :
集中点在t的代价: s=s+(p[k].pos-p[k].pos)*p[k].w;
集中点在t-1的代价:s'=s+ ( (sum[i]-sum[t-1]) -(sum[t-1]-sum[k-1]) ) *(p[t].pos-p[t-1].pos);
如果 s'<=s , 则t--,s=s'
E: 貌似很水。。队友搞的。
F:一个有向无环图加上一条边之后。问你是否存在一个环经过所有的点。
分析可得: 满足条件的无环图一定能够形成一条链,通过其拓扑序是否唯一,可以判断是否为链。
现在就是枚举一个点,作为链的起始点,然后找到一条包含所有点的链。并且最后一个点与起始点有边。
优化:找一个入度为1的点,作为起始点,经过一次拓扑序判断即可。(原因分析下就明白了)
G:两个矩形上有点,判断通过旋转和平移能够使矩形上的点重合。
只有四种旋转。。果断暴力一发就行
H:N个包里面分别有ni个信封,其中mi个信封中有邮票。 每个从一个包里打开一个信封,如果信封中有邮票,则取走邮票,最后把信封放回包里。每个人采取最优策略,问第K个人,拿到邮票的概率,答案以分数形式输出
每个包取到邮票的概率:mi/ni
第一个人必然是从概率最大的包里去信封。(n,m)
这去完后,信封数还是为n,期望还有邮票的信封数将放生改变:
m'=(m/n)*(m-1)+(n-m)/n * m=(n-1)/n *m
那下次从该包拿到含有邮票的信封的概率为:m'/n=(n-1)/n *( m/n );
因此取第k次拿到含有邮票的信封的概率为: p(k)= ((n-1)/n )^(k-1) *(m/n)
这题的思路就明显了。。用优先队列就行。
I:暂时还没想出来
K:一个序列,查询区间内,两个数差的绝对值最小是多少(数值的范围:1-10000)
大水题呀,,果断被坑了。。。
因为1-10000.。。故查询区间如果大于10000,答案必为零。其它范围的时候,,果断暴力一发就行