题目戳我

\(\text{Solution:}\)

考虑第二问,赢的局数最小,即输和平的局数最多。

考虑网络流,\(1,2,3\)表示\(Alice\)选择的三种可能性,\(4,5,6\)同理。

它们像源点和汇点连的是局数为容量的边,然后对于能和它平的和输的连边,边权为\(inf\),因为源点和汇点已经限制了流量,这里直接\(inf\)即可。

第一问就是三个数的三个最小值相加。

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. int n,a[4],b[4],S=0,T=100;
  4. int ans1=1e9+1,ans2=1e9+1;
  5. const int MAXN=5000;
  6. const int inf=(1<<30);
  7. int head[MAXN],tot=1,cur[MAXN],dep[MAXN];
  8. struct E{int nxt,to,flow;}e[MAXN];
  9. inline void add(int x,int y,int w){
  10. e[++tot].to=y;e[tot].nxt=head[x];e[tot].flow=w;head[x]=tot;
  11. e[++tot].to=x;e[tot].nxt=head[y];e[tot].flow=0;head[y]=tot;
  12. }
  13. bool bfs(int s,int t){
  14. memset(dep,0,sizeof dep);
  15. cur[s]=head[s];dep[s]=1;
  16. queue<int>q;q.push(s);
  17. while(!q.empty()){
  18. s=q.front();q.pop();
  19. for(int i=head[s];i;i=e[i].nxt){
  20. int j=e[i].to;
  21. if(!dep[j]&&e[i].flow){
  22. dep[j]=dep[s]+1;
  23. cur[j]=head[j];
  24. if(j==t)return true;
  25. q.push(j);
  26. }
  27. }
  28. }
  29. return false;
  30. }
  31. int dfs(int s,int flow,int t){
  32. if(flow<=0||s==t)return flow;
  33. int rest=flow;
  34. for(int i=cur[s];i;i=e[i].nxt){
  35. int j=e[i].to;
  36. if(dep[j]==dep[s]+1&&e[i].flow){
  37. int tmp=dfs(j,min(e[i].flow,rest),t);
  38. if(tmp<=0)dep[j]=0;
  39. rest-=tmp;e[i].flow-=tmp;e[i^1].flow+=tmp;
  40. if(rest<=0)break;
  41. }
  42. }
  43. return flow-rest;
  44. }
  45. int dinic(int s,int t){
  46. int ans=0;
  47. for(;bfs(s,t);)ans+=dfs(s,inf,t);
  48. return ans;
  49. }
  50. int main(){
  51. scanf("%d",&n);
  52. for(int i=1;i<=3;++i)scanf("%d",&a[i]),add(S,i,a[i]);
  53. for(int i=1;i<=3;++i)scanf("%d",&b[i]),add(i+3,T,b[i]);
  54. for(int i=1;i<=3;++i)add(i,i+3,inf);
  55. for(int i=1;i<=3;++i)add(i,(i+1)%3+4,inf);
  56. ans1=min(a[1],b[2])+min(a[2],b[3])+min(a[3],b[1]);
  57. ans2=dinic(S,T);
  58. swap(ans1,ans2);
  59. cout<<n-ans1<<" "<<ans2<<endl;
  60. return 0;
  61. }

【题解】CF1426E Rock, Paper, Scissors的更多相关文章

  1. 题解 CF1426E - Rock, Paper, Scissors

    一眼题. 第一问很简单吧,就是每个 \(\tt Alice\) 能赢的都尽量让他赢. 第二问很简单吧,就是让 \(\tt Alice\) 输的或平局的尽量多,于是跑个网络最大流.\(1 - 3\) 的 ...

  2. 2018 ACM-ICPC 中国大学生程序设计竞赛线上赛 H题 Rock Paper Scissors Lizard Spock.(FFT字符串匹配)

    2018 ACM-ICPC 中国大学生程序设计竞赛线上赛:https://www.jisuanke.com/contest/1227 题目链接:https://nanti.jisuanke.com/t ...

  3. SDUT 3568 Rock Paper Scissors 状压统计

    就是改成把一个字符串改成三进制状压,然后分成前5位,后5位统计, 然后直接统计 f[i][j][k]代表,后5局状压为k的,前5局比和j状态比输了5局的有多少个人 复杂度是O(T*30000*25*m ...

  4. FFT(Rock Paper Scissors Gym - 101667H)

    题目链接:https://vjudge.net/problem/Gym-101667H 题目大意:首先给你两个字符串,R代表石头,P代表布,S代表剪刀,第一个字符串代表第一个人每一次出的类型,第二个字 ...

  5. Gym - 101667H - Rock Paper Scissors FFT 求区间相同个数

    Gym - 101667H:https://vjudge.net/problem/Gym-101667H 参考:https://blog.csdn.net/weixin_37517391/articl ...

  6. Gym101667 H. Rock Paper Scissors

    将第二个字符串改成能赢对方时对方的字符并倒序后,字符串匹配就是卷积的过程. 那么就枚举字符做三次卷积即可. #include <bits/stdc++.h> struct Complex ...

  7. HDOJ(HDU) 2164 Rock, Paper, or Scissors?

    Problem Description Rock, Paper, Scissors is a two player game, where each player simultaneously cho ...

  8. HDU 2164 Rock, Paper, or Scissors?

    http://acm.hdu.edu.cn/showproblem.php?pid=2164 Problem Description Rock, Paper, Scissors is a two pl ...

  9. 1090-Rock, Paper, Scissors

    描述 Rock, Paper, Scissors is a classic hand game for two people. Each participant holds out either a ...

随机推荐

  1. AndroidStudio修改程序的包名,可以修改com.example.xxx之类的详解

    转载请说明出处.原创作品. 首先说明一下,当时公司需要修改androidStudio 项目的包名 于是上网查了一下,只看到了修改后面的包名,而不可以修改 前缀的com.example.xxx.所以很无 ...

  2. 故障:fork failed:Resource Temporarily Unavailable解决方案

    故障:fork failed:Resource Temporarily Unavailable解决方案 AIX在一次crontab bkapp.txt导入N多定时任务时候,该用户无法执行任何命令,再s ...

  3. 有手就行 虚拟机上安装Linux

    VMware上装Linux CentOS 初学一步步来

  4. Oracle12C创建scott账户

    Oracle12C创建scott账户 具体步骤: 打开SqlPlus 输入用户名和密码用户名:sys口令:sys as sysdba 创建c##scott用户CREATE USER c##scott ...

  5. Zabbix housekeeper processes more than 75% busy

    原因分析 为了防止数据库持续增大,Zabbix有自动删除历史数据的机制,即housekeeper,而在频繁清理历史数据的时候,MySQL数据库可能出现性能降低的情况,此时就会告警. 一般来说,Zabb ...

  6. java安全编码指南之:Number操作

    目录 简介 Number的范围 区分位运算和算数运算 注意不要使用0作为除数 兼容C++的无符号整数类型 NAN和INFINITY 不要使用float或者double作为循环的计数器 BigDecim ...

  7. 蓝奏网盘API

    蓝奏云网盘API 2.0 基于Python3实现,最强的蓝奏云API~ 蓝奏云注册 更新说明 修复了登录时 formhash 错误的问题 解决了多次上传大文件被限制的问题 #3 细化 API 接口的功 ...

  8. JS -- JavaScript简介

    JavaScript是一种属于网络的高级脚本语言(解释性脚本语言),已经被广泛用于Web应用开发,常用来为网页添加各式各样的动态功能,为用户提供更流畅美观的浏览效果. 一.如何插入JS代码? 使用&l ...

  9. Linux常用的三种软件安装方式

    一:Linux源码安装    1.解压源码包文件    源码包通常会使用tar工具归档然后使用gunzip或bzip2进行压缩,后缀格式会分别为.tar.gz与.tar.bz2,分别的解压方式:   ...

  10. [Java核心技术]第九章-集合(Java集合框架、具体的集合、映射)

    9.1Java集合框架 一些有的没的 可以使用接口类型存放集合的引用.一旦改变了想法,只需要在调用构造函数的地方做一处修改. add方法用于向集合添加元素,如果添加元素确实改变了集合就返回true. ...