训练的时候对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相关推荐

  1. 2017湘潭邀请赛E-Partical Sum | 绝对值的特性

    Partical Sum ####题意 给定一个长为n的数组,找到m组(L,R),L表示区间的起点,R表示区间的终点,使得| ∑ L R a i \sum_{L}^R a_i ∑LR​ai​| - C ...

  2. 2017广西邀请赛重现赛

    总题解:http://www.nike0good.com/674.html 1001: 2017ACM/ICPC广西邀请赛-重现赛 1001 A Math Problem #include <i ...

  3. [2016湘潭邀请赛 A. 2016] 大数取模+循环节

    [2016湘潭邀请赛 A. 2016] 大数取模+循环节 1. 题目链接 XTU OnlineJudge : [2016湘潭邀请赛 A. 2016] 2. 题意描述 [图片看不清可以放大.] 给定一个 ...

  4. 2018 湘潭邀请赛 部分题解

    2018 湘潭邀请赛 题解 A C F G K .其它题解,后续添加 A 题 没啥好讲的,签到题 从后面往前面数,大于个数的时候直接输出就行了. AC代码: #include<iostream& ...

  5. CCPC之湘潭邀请赛

    CCPC湘潭邀请赛 热身赛 5月11号,当天下午是打热身赛,四道题目,我本来以为是英文题,还特意让钢哥回去拿了下字典,可没想到热身赛是中文题,幸苦钢哥白跑一趟了. 再来说题目吧,几个题目意思都比较明了 ...

  6. 2016湖南湘潭邀请赛 - 2019牛客国庆集训派对day6

    2016湖南湘潭邀请赛 - 2019牛客国庆集训派对day6 A - 2016 题意:求一个2阶矩阵的n次幂,对7取模的结果 思路:可以用上面介绍的10进制倍增的方法.也可以用 n 对2016取模,还 ...

  7. 18湘潭邀请赛总结(打铁)

    题目链接(hdu复赛) 2018年湘潭邀请赛,在湘大举行,当时一起打的过去的,因为没出市就方便点.第一次参加现场赛,首先反省一下自己,比赛前算法先不说(没有好好搞过),就连普通的题,数学性质的题都很少 ...

  8. 2021CCPC湘潭邀请赛复盘

    写在前面 刚到长沙,补完作业.自然选择号八题第六,算是正常发挥,毕竟邀请赛没什么强队来打.不过赛前确实想过拿个奖杯回去- 再接再厉吧. 周六先去长沙理工打了蓝桥杯国赛,感觉比之前要简单,甚至比第一场省 ...

  9. 2015湘潭邀请赛小记

    事实上,在今年赛之前,我已经很长一段时间没有碰过ACM了.这从我blog的发帖时间上也能看得出来.很多内容去年学得并不是很熟练,再加上接近半年时间没有练习,所以一些基本的常用算法都忘了很多.在今年5月 ...

最新文章

  1. 2010河北职称计算机考试,2010年河北省职称计算机考试试题..doc
  2. linux线程创建 类函数吗,linux多线程创建时使用类成员函数作为参数
  3. pytorch自定义数据集DataLoder
  4. shell-grep命令详解(转)
  5. 计算机关机键桌面,电脑桌面按钮关机关不了怎么办? 爱问知识人
  6. linux切换到字符界面stemctl,CentOS7两种模式
  7. sequel pro mac_Mac手绘插画绘图软件推荐
  8. java只修改变的字段_修改Java中的最终字段
  9. Vbs脚本编程简明教程之二
  10. 计算机xp系统ie8,教你能够完全windows XP下IE8的方法
  11. iphone12屏幕尺寸
  12. web服务器的作用有哪些,web服务器的作用
  13. 关于中小学编程教育的一些看法
  14. JAVA的向上转型与向下转型(二)
  15. 权限绕过漏洞(越权漏洞)
  16. 计算机网络-实验四:配置网络路由
  17. LWN:利用PAM Duress来增加一个被胁迫时的专用密码!
  18. VTK学习-第一个多柱体生成
  19. 云栖科技评论第77期:Z世代“掌钱”
  20. 点菜java_java点菜系统代码

热门文章

  1. intellij idea 配置远程访问本地的tomcat项目
  2. slice,substr和substring的区别
  3. linux下修改网卡接口名称
  4. 空类,虚函数类,虚继承类的空间大小
  5. CEGUI Lua 编码
  6. vmware workstation 下安装ubuntu
  7. 利用DHCP,http,tftp,pxe实现批量自动化部署系统
  8. shell用到的命令(2) —— break,continue,echo,eval,
  9. 别让用户发呆——设计中的防呆策略
  10. 使用 Fries 创建性感的 Android 风格移动应用界面