题意比较难懂?反正我为此特地查了优先级倒置和优先级置顶协议是什么。

读懂题以后就好办了,直接模拟即可。

由于数据范围较小,写得比较暴力,应该还有很大优化空间。

  1. #include<cstdio>
  2. int clk,n,m,f[21],q[21];
  3. struct node;
  4. node*top;
  5. void build();
  6. node*find_top();
  7. int id(node*);
  8. node&at(int);
  9. void max_eq(int&s,int t){
  10. if(s<t)
  11. s=t;
  12. }
  13. struct node{
  14. char s[100][8];
  15. int a,b,c,d,k,t,v[100];
  16. bool r,l;
  17. void scan(){
  18. scanf("%d%d%d",&t,&b,&a);
  19. for(int i=0;i!=a;++i){
  20. scanf("%s",s[i]);
  21. sscanf(s[i]+1,"%d",v+i);
  22. if(*s[i]==76)
  23. max_eq(q[v[i]],b);
  24. }
  25. }
  26. bool test(int i){
  27. return*s[k]==76&&(v[k]==i||c<=q[i]);
  28. }
  29. void run(){
  30. c=b;
  31. for(int i=1;i<=n;++i)
  32. if(at(i).r&&!at(i).d)
  33. for(int j=1;j<=m;++j)
  34. if(f[j]==i&&test(j)){
  35. l=1;
  36. max_eq(at(i).c,c);
  37. }
  38. r=1;
  39. }
  40. void next(){
  41. if(*s[k]==76)
  42. f[v[k]]=id(this);
  43. if(*s[k]==85){
  44. f[v[k]]=0;
  45. c=b;
  46. for(int j=1;j<=m;++j)
  47. if(f[j]==id(this))
  48. for(int i=1;i<=n;++i)
  49. if(i!=id(this)&&at(i).r&&!at(i).d&&at(i).test(j))
  50. max_eq(c,at(i).c);
  51. }
  52. if((k+=*s[k]!=67||++clk&&!--v[k])==a)
  53. d=clk;
  54. }
  55. }task[21];
  56. int id(node*p){
  57. return p-task;
  58. }
  59. node&at(int i){
  60. return task[i];
  61. }
  62. void build(){
  63. for(int i=1;i<=n;++i)
  64. if(at(i).r&&!at(i).d){
  65. at(i).l=0;
  66. for(int j=1;j<=m;++j)
  67. at(i).l|=f[j]&&f[j]!=i&&at(i).test(j);
  68. }
  69. }
  70. node*find_top(){
  71. top=0;
  72. for(int i=1;i<=n;++i)
  73. if(at(i).r&&!at(i).d&&!at(i).l&&(!top||at(i).c>top->c))
  74. top=&at(i);
  75. return top;
  76. }
  77. bool ended(){
  78. for(int i=1;i<=n;++i)
  79. if(!at(i).d)
  80. return 0;
  81. return 1;
  82. }
  83. int main(){
  84. scanf("%d%d",&n,&m);
  85. for(int i=1;i<=n;++i)
  86. at(i).scan();
  87. while(!ended()){
  88. for(int i=1;i<=n;++i)
  89. if(!at(i).r&&at(i).t==clk)
  90. at(i).run();
  91. build();
  92. if(find_top()||!++clk)
  93. top->next();
  94. }
  95. for(int i=1;i<=n;++i)
  96. printf("%d\n",at(i).d);
  97. }

BZOJ4620: [Wf2016]What Really Happened on Mars?的更多相关文章

  1. bzoj AC倒序

    Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...

  2. (29)Why Earth may someday look like Mars

    https://www.ted.com/talks/anjali_tripathi_why_earth_may_someday_look_like_mars/transcript00:12So whe ...

  3. 【腾讯Bugly干货分享】微信终端跨平台组件 Mars 系列 - 我们如约而至

    导语 昨天上午,微信在广州举办了微信公开课Pro.于是,精神哥这两天的朋友圈被小龙的"八不做"刷屏了.小伙伴们可能不知道,下午,微信公开课专门开设了技术分论坛.在分论坛中,微信开源 ...

  4. 【腾讯Bugly干货分享】微信终端跨平台组件 mars 系列(二) - 信令传输超时设计

    本文来自于腾讯Bugly公众号(weixinBugly),未经作者同意,请勿转载,原文地址:http://mp.weixin.qq.com/s/9DJxipJaaBC8yC-buHgnTQ 作者简介: ...

  5. 如约而至:微信自用的移动端IM网络层跨平台组件库Mars已正式开源

    1.前言 关于微信内部正在使用的网络层封装库Mars开源的消息,1个多月前就已满天飞(参见<微信Mars:微信内部正在使用的网络层封装库,即将开源>),不过微信团队没有失约,微信Mars ...

  6. hdu4059 The Boss on Mars(差分+容斥原理)

    题意: 求小于n (1 ≤ n ≤ 10^8)的数中,与n互质的数的四次方和. 知识点: 差分: 一阶差分: 设  则    为一阶差分. 二阶差分: n阶差分:     且可推出    性质: 1. ...

  7. 【腾讯Bugly干货分享】微信mars 的高性能日志模块 xlog

    本文来自于腾讯bugly开发者社区,未经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/581c2c46bef1702a2db3ae53 Dev Club 是一个交流移动 ...

  8. [原创]Eclipse Mars 在Ubuntu升级后无法工作的解决方法

    近日将自己的Ubuntu从14.04LTS升级到了16.04LTS,顿时发现Eclipse不能正常工作了,到Ubuntu的官网上转了一圈发现以下解决方案: 症状: [1]Eclipse启动很慢; [2 ...

  9. PAT (Advanced Level) Practise:1027. Colors in Mars

    [题目链接] People in Mars represent the colors in their computers in a similar way as the Earth people. ...

随机推荐

  1. android studio用法笔记

    1.每次创建新工程的时候,就会“check sdk repository”,然而这个进度条一动不动,解决方法:file>setting>plugins>sdk updater禁用就行 ...

  2. 十天冲刺---Day5

    站立式会议 站立式会议内容总结: 燃尽图 照片 PM确实不应该交给组内编码最强的人来做. 编码的过程还要考虑整个项目的流程压力较大. 需要队友的支持和沟通.

  3. oracle数据匹配merge into

    来源于:http://blog.csdn.net/vtopqx/article/details/50633865 前言: 很久之前,估计在2010年左右在使用Oralce,当时有个需求就是需要对两个表 ...

  4. java 时间操作

    设置获取时间日期格式 // 设置日期格式 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm"); // 为 ...

  5. Linux_cheat命令安装和使用

      1.安装python yum -y install python   2.安装epel源.安装pip yum install epel-release -y  yum install python ...

  6. ES6新特性:Proxy代理器

    ES6新特性:Proxy: 要使用的话, 直接在浏览器中执行即可, node和babel目前还没有Proxy的polyfill;,要使用的话,直接在浏览器中运行就好了, 浏览器的兼容性为:chrome ...

  7. Html一天入门

    一.什么是HTML 1.html: HyperText Markup Language 超文本标记语言,是最基础的网页语言,而且都是由标签组成. 2.基本格式: <html> <he ...

  8. Leetcode 372. Super Pow

    使用公式 c = ab  =>  c mod d = [a mod d * b mod d] mod d 所以a^423 mod d = (a^100)^4 * (a ^10)^2 * a^3 ...

  9. 使用git管理源代码

    之前用U盘管理自己的demo很不方便.然后发现网上有个git的网站可以管理源代码  这里只是记录简单使用  注:这不是教程 本人之前也是参考这2篇文章http://blog.jobbole.com/7 ...

  10. 在VS里配置及查看IL

    在VS里配置及查看IL 来源:网络 编辑:admin 在之前的版本VS2010中,在Tools下有IL Disassembler(IL中间语言查看器),但是我想直接集成在VS2012里使用,方法如下: ...