Codeforces Round #147 (Div. 2)

http://codeforces.com/contest/237

A:

确实是水题,不过本人脑残,叫了四遍才对,第一遍读错题意些错了,第二边忘了去重定向,第三边去了重定向忘了保存(因为交的文件吗),四边忘掉了break。终于第五边对了。无语了。。粗心啊。。就是统计以下时间相同(同时到达咖啡店的人多少个即可)

B:

题意:给定一个有n行,每一行有ci个数的矩阵,求如何交换两个数使得矩阵满足a[i][j] > a[i - 1][j] && a[i][j] > a[i - 1][j]。

思路:分析可知,如要满足条件我们只要将矩阵转化成一维的数组,使交换后的数组满足递增即可。开两个数组分别记录转化后的值,一个从小到大排序,然后与原序列比较交换值,记录交换即可。

C:

题意:给定区间[a,b]求l属于[1,b-a + 1]使得任意的x属于[a, b - l  + 1]都满足[x, x + l - 1]至少存在k个素数的最小l;

思路: 才开始我是暴力从小到大枚举l的值,然后在区间[a,b - l + 1]检查是否都满足,这样本以为能够过,因为我们找到了就退出,可是还是tle了无语了。然后想各种优化,忽然想到随着l的增加区间[a,b - l  + 1]满足条件的x是递增的,于是想到了二分,我们枚举l属于区间[k, b - a + 1]枚举出当前 l 如果再减小的话区间[a, b - l + 1]就存在不满足的了。此时 l 肯定是最小的。

D:没看懂题意。。。

E:

题意:给定一个目标字符串,然后给你n个字符串,从这n个字符串里面s1,s2,...sn,抽出字符组成目标字符串,每个字符串都对应这最多可以抽出a[i]个字符,抽取每个字符都有一定的费用,抽si里面的字符的话,每个字符需要i的钱数,判断目标字符串是否能够从这n个字符串里面抽出字符组成,若可以输出最小的费用,否则输出-1;

思路:最小费用最大流。说实话看到这个题目时,真没网网络流方向想,比赛时时间也不够了,赛后一看tags 显示flows 才豁然开朗。 网流的题目关键还是能够看出如何建图,然后直接套模板即可。  建立源点s 汇点 e

s ---(1 - n)间边流量为a[i](每个字符串最多可抽取的字符数)权值为0 --> (1 +n ,1 + desl)目标字符中出现的字符 流量min(字符串i具有的des[j]字符的个数,a[i])  权值为i  -->e 流量为目标串需要的字符的个数,权值为0

 

posted @ 2012-10-26 22:03  E_star  阅读(233)  评论(0编辑  收藏  举报