2017 湘潭邀请赛JSCPC GJ
训练的时候对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。。。
转载于:https://www.cnblogs.com/rayrayrainrain/p/9003782.html
2017 湘潭邀请赛JSCPC GJ相关推荐
- 2017湘潭邀请赛E-Partical Sum | 绝对值的特性
Partical Sum ####题意 给定一个长为n的数组,找到m组(L,R),L表示区间的起点,R表示区间的终点,使得| ∑ L R a i \sum_{L}^R a_i ∑LRai| - C ...
- 2017广西邀请赛重现赛
总题解:http://www.nike0good.com/674.html 1001: 2017ACM/ICPC广西邀请赛-重现赛 1001 A Math Problem #include <i ...
- [2016湘潭邀请赛 A. 2016] 大数取模+循环节
[2016湘潭邀请赛 A. 2016] 大数取模+循环节 1. 题目链接 XTU OnlineJudge : [2016湘潭邀请赛 A. 2016] 2. 题意描述 [图片看不清可以放大.] 给定一个 ...
- 2018 湘潭邀请赛 部分题解
2018 湘潭邀请赛 题解 A C F G K .其它题解,后续添加 A 题 没啥好讲的,签到题 从后面往前面数,大于个数的时候直接输出就行了. AC代码: #include<iostream& ...
- CCPC之湘潭邀请赛
CCPC湘潭邀请赛 热身赛 5月11号,当天下午是打热身赛,四道题目,我本来以为是英文题,还特意让钢哥回去拿了下字典,可没想到热身赛是中文题,幸苦钢哥白跑一趟了. 再来说题目吧,几个题目意思都比较明了 ...
- 2016湖南湘潭邀请赛 - 2019牛客国庆集训派对day6
2016湖南湘潭邀请赛 - 2019牛客国庆集训派对day6 A - 2016 题意:求一个2阶矩阵的n次幂,对7取模的结果 思路:可以用上面介绍的10进制倍增的方法.也可以用 n 对2016取模,还 ...
- 18湘潭邀请赛总结(打铁)
题目链接(hdu复赛) 2018年湘潭邀请赛,在湘大举行,当时一起打的过去的,因为没出市就方便点.第一次参加现场赛,首先反省一下自己,比赛前算法先不说(没有好好搞过),就连普通的题,数学性质的题都很少 ...
- 2021CCPC湘潭邀请赛复盘
写在前面 刚到长沙,补完作业.自然选择号八题第六,算是正常发挥,毕竟邀请赛没什么强队来打.不过赛前确实想过拿个奖杯回去- 再接再厉吧. 周六先去长沙理工打了蓝桥杯国赛,感觉比之前要简单,甚至比第一场省 ...
- 2015湘潭邀请赛小记
事实上,在今年赛之前,我已经很长一段时间没有碰过ACM了.这从我blog的发帖时间上也能看得出来.很多内容去年学得并不是很熟练,再加上接近半年时间没有练习,所以一些基本的常用算法都忘了很多.在今年5月 ...
最新文章
- 2010河北职称计算机考试,2010年河北省职称计算机考试试题..doc
- linux线程创建 类函数吗,linux多线程创建时使用类成员函数作为参数
- pytorch自定义数据集DataLoder
- shell-grep命令详解(转)
- 计算机关机键桌面,电脑桌面按钮关机关不了怎么办? 爱问知识人
- linux切换到字符界面stemctl,CentOS7两种模式
- sequel pro mac_Mac手绘插画绘图软件推荐
- java只修改变的字段_修改Java中的最终字段
- Vbs脚本编程简明教程之二
- 计算机xp系统ie8,教你能够完全windows XP下IE8的方法
- iphone12屏幕尺寸
- web服务器的作用有哪些,web服务器的作用
- 关于中小学编程教育的一些看法
- JAVA的向上转型与向下转型(二)
- 权限绕过漏洞(越权漏洞)
- 计算机网络-实验四:配置网络路由
- LWN:利用PAM Duress来增加一个被胁迫时的专用密码!
- VTK学习-第一个多柱体生成
- 云栖科技评论第77期:Z世代“掌钱”
- 点菜java_java点菜系统代码