2017 湘潭邀请赛&JSCPC G&J
训练的时候对G想了一个假算法。。也有很大可能是写错了。。
下来一看别人的G 看起来很奇妙。。
开始把所有的左括号翻成右括号,然后cost*=-1 这样在优先队列中就是最优的 然后for每一段 如果前缀和小于0就从优先队列中取右括号翻转
最后的结果一定是一个可行的括号序列
1 如果所有的原左括号都被重新反转,那么我们的选择仍然是最优,因为实际上没有在这个上面消耗
2 如果原左括号没有都被反转回去 那么我们的实际消耗也是最少的
J题一看就能想出来nmmm的想法 但是很远。。并没有想到nmm的 没想到可以nmmlogm过 就比较神奇了
画图可以发现 数字的大小其实是从右向左不断扩散的
思考nmmm的做法 对于第i个数字 枚举他是第k个a中的数字,那么就需要找到 第j个数字让它在a中做第k+1位来承接状态
但是这样状态不全 第j个数字是有限制的 它需要比第i个数字大或者小 而又有范围
因为数字的大小有规律 所以把范围也记录下来 第i个数字一定是范围的一边 于是只需要记录另一边就可以了
对于“另一边” 要么是第j个数字要么是之前传下来的 总之我们需要for一下这个范围来让他们加上当前状态
考虑区间加直接把状态加上去就可以把m变成logm了。。虽然复杂度仍然感觉不科学
G
- #include<iostream>
- #include<cstdio>
- #include<cmath>
- #include<cstring>
- #include<vector>
- #include<queue>
- #include<map>
- #include<algorithm>
- #include<stack>
- using namespace std;
- #define L long long
- #define rep(i,l,r) for(L i = l ; i <= r ; i ++ )
- const L mod = 1000000000 + 7 ;
- struct node {
- L cost ;
- L num ;
- friend bool operator < (node A , node B) {
- return A.cost > B.cost ;
- }
- };
- L a[100050] ;
- L b[100050] ;
- int main () {
- L n ;
- while(scanf("%lld" , &n) != EOF) {
- L ans = 0 ;
- rep(i,1,n) {
- L l,d ; char s[20] ;
- scanf("%lld%s%lld" , &l,s,&d) ;
- a[i] = l ;
- b[i] = d ;
- if(s[0] == '(') {
- ans += a[i] * b[i] ;
- b[i] *= -1 ;
- }
- }
- priority_queue<node> q ;
- L sum = 0 ;
- rep(i,1,n) {
- node c ;
- c.num = a[i] ;
- c.cost = b[i] ;
- q.push(c) ;
- sum -= c.num ;
- if(sum >= 0) continue ;
- L ned = sum * (-1) ;
- ned ++ ; ned /= 2 ;
- sum += ned * 2;
- while(ned > 0) {
- node c = q.top() ; q.pop() ;
- if(c.num >= ned) {
- c.num -= ned ;
- ans += ned * c.cost ;
- q.push(c) ;
- ned = 0 ;
- }
- else {
- ned -= c.num ;
- ans += c.num * c.cost ;
- }
- }
- }
- printf("%lld\n" , ans) ;
- }
- }
J
- #include<iostream>
- #include<cstdio>
- #include<cmath>
- #include<cstring>
- #include<vector>
- #include<queue>
- #include<map>
- #include<algorithm>
- #include<stack>
- using namespace std;
- #define L long long
- #define rep(i,l,r) for(L i = l ; i <= r ; i ++ )
- const L mod = 1000000000 + 7 ;
- L n , m ;
- L a[22] ;
- L b[505] ;
- L dp[505][505][22] ;
- L s[505][505][22] ;
- L lowbit(L x) {
- return (x & (-x)) ;
- }
- void add(L x,L j,L k,L val) {
- while(x <= m) {
- s[x][j][k] += val ;
- while(s[x][j][k] < 0) s[x][j][k] += mod ;
- s[x][j][k] %= mod ;
- x += lowbit(x) ;
- }
- }
- L sum(L x,L j,L k) {
- L sum = 0 ;
- while(x) {
- sum += s[x][j][k] ;
- sum %= mod ;
- x -= lowbit(x) ;
- }
- return sum ;
- }
- void upda(L l,L r,L val,L j,L k) {
- add(l,j,k,val) ;
- add(r+1,j,k,-val) ;
- }
- int main () {
- while(cin >> n >> m) {
- rep(i,1,n) cin >> a[i] ;
- rep(i,1,m) cin >> b[i] ;
- memset(dp, 0, sizeof(dp)) ;
- memset(s, 0, sizeof(s)) ;
- L ans = 0 ;
- for(L i = 1 ; i <= m ; i ++ ) {
- for(L j = 1 ; j <= m ; j ++ ) {
- for(L k = 1 ; k <= n ; k ++ ) {
- if(k == 1) {
- L bord ;
- if(a[1] == 0) bord = m ;
- else bord = 1 ;
- if (bord != j) continue ;
- dp[i][bord][1] = 1 ;
- if (k == n){
- ans += dp[i][j][k];
- ans %= mod ;
- }
- } else {
- dp[i][j][k] = sum(b[i], j, k);
- if (k == n){
- ans += dp[i][j][k];
- ans %= mod ;
- }
- }
- }
- }
- for(L j = 1 ; j <= m ; j ++ ) {
- for(L k = 1 ; k <= n ; k ++ ) {
- if(k == 1) {
- L bord ;
- if(a[1] == 0) bord = m ;
- else bord = 1 ;
- if (bord != j) continue ;
- L x = min(bord,b[i]) ;
- L y = max(bord,b[i]) ;
- if(a[2] == 0) {
- upda(x,y,1,y,2) ;
- } else {
- upda(x,y,1,x,2) ;
- }
- } else {
- L x = min(j, b[i]);
- L y = max(j, b[i]);
- if (dp[i][j][k] == 0) continue;
- if (a[k + 1] == 0) {
- upda(x, y, dp[i][j][k], y, k + 1);
- } else {
- upda(x, y, dp[i][j][k], x, k + 1);
- }
- }
- }
- }
- }
- printf("%lld\n" , ans) ;
- }
- }
J线段树会T。。。
2017 湘潭邀请赛&JSCPC G&J的更多相关文章
- XTU 1264 - Partial Sum - [2017湘潭邀请赛E题(江苏省赛)]
2017江苏省赛的E题,当时在场上看错了题目没做出来,现在补一下…… 题目链接:http://202.197.224.59/OnlineJudge2/index.php/Problem/read/id ...
- XTU 1267 - Highway - [树的直径][2017湘潭邀请赛H题(江苏省赛)]
这道题可能有毒……总之一会儿能过一会儿不能过的,搞的我很心烦…… 依然是上次2017江苏省赛的题目,之前期末考试结束了之后有想补一下这道题,当时比较懵逼不知道怎么做……看了题解也不是很懂……就只好放弃 ...
- XTU 1260 - Determinant - [2017湘潭邀请赛A题(江苏省赛)][高斯消元法][快速幂和逆元]
是2017江苏省赛的第一题,当时在场上没做出来(废话,那个时候又不懂高斯消元怎么写……而且数论也学得一塌糊涂,现在回来补了) 省赛结束之后,题解pdf就出来了,一看题解,嗯……加一行再求逆矩阵从而得到 ...
- XTU 1261 - Roads - [最小割][2017湘潭邀请赛B题(江苏省赛)]
之前在网上搜了一个下午没搜到这道题的题解,然后同时又对着叉姐写的两行字题解看了一个下午: 虽然基本上已经知道了这题的思路,但愣是因为自己代码实现起来太繁复,外加不确定正确性,没敢码…… 但是一道题肝了 ...
- 1250 Super Fast Fourier Transform(湘潭邀请赛 暴力 思维)
湘潭邀请赛的一题,名字叫"超级FFT"最终暴力就行,还是思维不够灵活,要吸取教训. 由于每组数据总量只有1e5这个级别,和不超过1e6,故先预处理再暴力即可. #include&l ...
- 湘潭邀请赛+蓝桥国赛总结暨ACM退役总结
湘潭邀请赛已经过去三个星期,蓝桥也在上个星期结束,今天也是时候写一下总结了,这应该也是我的退役总结了~ --------------------------------湘潭邀请赛----------- ...
- HDU 6270 Marriage (2017 CCPC 杭州赛区 G题,生成函数 + 容斥 + 分治NTT)
题目链接 2017 CCPC Hangzhou Problem G 题意描述很清晰. 考虑每个家庭有且仅有$k$对近亲的方案数: $C(a, k) * C(b, k) * k!$ 那么如果在第$1$ ...
- 湘潭邀请赛 Hamiltonian Path
湘潭邀请赛的C题,哈密顿路径,边为有向且给定的所有边起点小于终点,怎么感觉是脑筋急转弯? 以后一定要牢记思维活跃一点,把复杂的事情尽量简单化而不是简单的事情复杂化. #include<cstdi ...
- 湘潭邀请赛 2018 I Longest Increasing Subsequence
题意: 给出一个长度为n的序列,序列中包含0.定义f(i)为把所有0变成i之后的Lis长度,求∑ni=1i⋅f(i). 题解: 设不考虑0的Lis长度为L,那么对于每个f(i),值为L或L+1. 预处 ...
随机推荐
- instanceof和isInstance(Object obj) 和isAssignableFrom(Class cls)的区别和联系
instanceof和isInstance(Object obj) 和isAssignableFrom(Class cls)的区别和联系 编程的时候可能会遇到一个不知道它属于哪个类的 ...
- Spoken English Practice(Look, That cute guy is checking me out. come on, give me a break, he's just looking around.)
绿色:连读: 红色:略读: 蓝色:浊化: 橙色:弱读 下划线_为浊化 口语蜕变(2017/7/6) 英 ...
- c#读取excel到dataset
public DataSet TransExcelToDataSet(string fileName, List<string> sheetNames) { OleDbConnection ...
- Xcode 编译静态库
有时候,我们需要将一部分经常用到的代码提取出来用来复用,或者说需要用到c++的代码的时候,可以通过编译成静态库的方式来使用.本文中使用的Xcode版本是8.3,静态库制作过程和其他版本基本一样,可能出 ...
- 如何重定向 stderr ?
可以使用该方法写一个轻量级日志类 #include <cstdio> int main() { FILE *stream = freopen("freopen.txt" ...
- c++智能指针,new之后不需要delete,简单的垃圾回收
http://www.cnblogs.com/TenosDoIt/p/3456704.html 智能指针的初始化: 错误: std::shared_ptr<Serializer> seri ...
- EC断言16种判断
expected_conditions一般也简称EC,本篇先介绍下有哪些功能,后续更新中会单个去介绍. title_is: 判断当前页面的title是否完全等于(==)预期字符串,返回布尔值 titl ...
- 初识Locust---认识
性 能测试工具: 基于Python的性能测试工具-locust 现在性能测试方面有很多测试工具,比如我们熟悉的loadrunner.jmeter.ab等,用过的也就是这几种,如果是学过这些工具的可能对 ...
- Keras网络层之常用层Core
常用层 常用层对应于core模块,core内部定义了一系列常用的网络层,包括全连接.激活层等 Dense层 keras.layers.core.Dense(units, activation=None ...
- Hbase1.2.4概述
安装Hbase的时候,需要注意版本与Hadoop的版本兼容,具体查看:https://hbase.apache.org/book.html#basic.prerequisites 如下图: 我的Had ...