2016 计蒜之道 初赛 第五场

腾讯推出了一款新游戏:勇者的故事。在游戏里有一个勇者,要去挑战大魔王。大魔王有 nnn 支护卫队,第 iii 支护卫队里有 mim_im​i​​ 只恶魔。勇者和恶魔都有攻击力和防御力,当两个角色发生战斗时,若一方的防御力小于另一方的攻击力,则这一方会死亡(存在两边都死亡或两边都存活的情况)。勇者的攻击力是 111,恶魔们的防御力全都是 000。每当勇者 击杀 了一只恶魔并且勇者仍 存活,勇者的防御力会增加 111。当勇者与一支护卫队发生战斗时,勇者会依照护卫队的顺序从前往后依次与恶魔们发生战斗(这是因为恶魔们训练有素,他们总是排成一条竖线冲锋)。恶魔们一共会换防 qqq 次,对于第 iii 次换防 (xi,ai,yi,bi)(x_i,a_i,y_i,b_i)(x​i​​,a​i​​,y​i​​,b​i​​),第 xix_ix​i​​ 支护卫队的前 aia_ia​i​​ 只恶魔会与第 yiy_iy​i​​ 支护卫队的前 bib_ib​i​​ 只恶魔交换。

你的任务是在每次换防之后,计算出若此时勇者要击杀全部的护卫队恶魔并见到大魔王,至少需要多少点初始防御力。勇者可以决定先与哪支护卫队发生战斗,但必须击杀完一支护卫队才能挑战另一支。

输入格式

第一行输入一个正整数 n(n≥2)n(n \geq 2)n(n≥2),表示护卫队数量。

接下来输入 nnn 行,第 iii 行输入第一个整数 mi(mi≥0,∑imi≥1)m_i(m_i \geq 0,\sum_{i}m_i \geq 1)m​i​​(m​i​​≥0,∑​i​​m​i​​≥1),接着输入有 mim_im​i​​ 个空格分隔的整数 attacki,j(1≤attacki,j≤100000)attack_{i,j}(1 \leq attack_{i,j} \leq 100000)attack​i,j​​(1≤attack​i,j​​≤100000),表示第 iii 支护卫队按从前往后顺序,第 jjj 个恶魔的攻击力。

接下来一行输入一个整数 q(q≥1)q(q \geq 1)q(q≥1),表示换防次数。

接着输入 qqq 行,第 iii 行输入 444 个整数 xi,ai,yi,bi(xi≠yi;1≤x,y≤n;ai,bi≥0)x_i,a_i,y_i,b_i(x_i \neq y_i;1\leq x,y \leq n;a_i,b_i \geq 0)x​i​​,a​i​​,y​i​​,b​i​​(x​i​​≠y​i​​;1≤x,y≤n;a​i​​,b​i​​≥0),表示第 iii 次换防。

对于简单版本:n,mi,q≤8n,m_i,q \leq 8n,m​i​​,q≤8;∑imi≤64\sum_{i}m_i \leq 64∑​i​​m​i​​≤64;

对于中等版本:n,mi,q≤1000n,m_i,q \leq 1000n,m​i​​,q≤1000;∑imi≤1000\sum_{i}m_i \leq 1000∑​i​​m​i​​≤1000;

对于困难版本:n,mi,q≤100000n,m_i,q \leq 100000n,m​i​​,q≤100000;∑imi≤100000\sum_{i}m_i \leq 100000∑​i​​m​i​​≤100000。

输出格式

输出有 qqq 行,请在每次换防后,输出若此时勇者要 击杀 全部的护卫队恶魔并 存活,至少需要的初始防御力点数。
样例输入

2
5 2 5 1 5 6
4 5 6 7 8
3
1 3 2 2
1 4 2 0
1 0 2 5

样例输出

4
5
5

提示信息

第一次换防后,第一支护卫队变为 5,6,5,65,6,5,65,6,5,6,第二支护卫队变为 2,5,1,7,82,5,1,7,82,5,1,7,8。若先攻击第一队再攻击第二队,需要 555 点防御力。若先攻击第二队再攻击第一队,则只需要 444 点防御力。

第二次换防后,第一支护卫队没有恶魔了,第二支护卫队变为 5,6,5,6,2,5,1,7,85,6,5,6,2,5,1,7,85,6,5,6,2,5,1,7,8。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>struct ListNode {int attack;ListNode *next;ListNode() {attack = 0;next = NULL;}
};struct devilList {ListNode *head;int length;devilList() {head = NULL;length = 0;}
};int getResultFromList(ListNode *head) {int cur = 0, min = 0;ListNode *head_t = head;while (head_t) {if (head_t->attack > cur) {min += head_t->attack - cur;cur = head_t->attack;}cur++;head_t = head_t->next;}return min;
}int main() {int n;int i, j;int attack;ListNode *head_t, *node_t;//int _attack[1000];scanf("%d", &n);devilList *devil = (devilList *)malloc(sizeof(devilList) * n);memset(devil, 0, sizeof(devilList ) * n);for (i = 0; i < n; ++i) {scanf("%d", &(devil[i].length));for (j = 0; j < devil[i].length; ++j) {scanf("%d", &attack);if (!devil[i].head) {devil[i].head = (ListNode *)malloc(sizeof(ListNode));memset(devil[i].head, 0, sizeof(ListNode));devil[i].head->attack = attack;devil[i].head->next = NULL;head_t = devil[i].head;}else {node_t = (ListNode *)malloc(sizeof(ListNode));memset(node_t, 0, sizeof(ListNode));node_t->attack = attack;node_t->next = NULL;head_t->next = node_t;head_t = head_t->next;}}}int q;int *defX, *defA, *defY, *defB, *resQ;scanf("%d", &q);defX = (int *)malloc(sizeof(int) * q);defY = (int *)malloc(sizeof(int) * q);defA = (int *)malloc(sizeof(int) * q);defB = (int *)malloc(sizeof(int) * q);resQ = (int *)malloc(sizeof(int) * q);for (i = 0; i < q; ++i) {scanf("%d%d%d%d", &(defX[i]), &(defA[i]), &(defY[i]), &(defB[i]));}ListNode *tmp = NULL, *tmp2 = NULL;for (i = 0; i < q; ++i) {tmp = NULL;tmp2 = NULL;for (j = 0; j < defA[i]; ++j) {if (tmp) tmp = tmp->next;else tmp = devil[defX[i] - 1].head;}for (j = 0; j < defB[i]; ++j) {if (tmp2) tmp2 = tmp2->next;else tmp2 = devil[defY[i] - 1].head;}if (tmp && tmp2) {ListNode *tmp_next = tmp->next;tmp->next = tmp2->next;tmp2->next = tmp_next;}else {if (!tmp && !tmp2) {resQ[i] = 0;continue;}else {if (!tmp) {tmp2->next = devil[defX[i] - 1].head;devil[defX[i] - 1].head = NULL;}else {tmp->next = devil[defY[i] - 1].head;devil[defY[i] - 1].head = NULL;}}}ListNode *tmp_head = devil[defX[i] - 1].head;devil[defX[i] - 1].head = devil[defY[i] - 1].head;devil[defY[i] - 1].head = tmp_head;int min = 100000;for (j = 0; j < n; ++j) {int res = (devil[j].head) ? getResultFromList(devil[j].head) : min;min = (min < res) ? min : res;}resQ[i] = min;}for (i = 0; i < q; ++i) {printf("%d\n", resQ[i]);}return 0;
}

完美!

2016 计蒜之道 初赛 第五场相关推荐

  1. 2017 计蒜之道 初赛 第五场 B. UCloud 的安全秘钥(简单)

    暴力. 暴力枚举$S$串的每一个长度为$m$的子串,排序判断即可. #include <iostream> #include <cstdio> #include <cst ...

  2. 2016 计蒜之道 初赛 第二场 联想公司的 logo 设计(计蒜客)

    题目: 输入输出说明: 输入输出样例: #include <stdio.h> #include <math.h> #define PI 3.1415926535898 int ...

  3. 2016 计蒜之道 初赛 第一场 青云的服务器密钥

    青云给每台服务器设置了一个由小写字母a-z组成的密钥.密钥的易破解程度定义如下: 对于密钥 S1..SnS_1..S_nS​1​​..S​n​​,我们需要首先计算其对应的π\piπ 数组.对于任意的 ...

  4. 2016计蒜之道初赛第一场----A青云的服务器密钥【贪心】

    青云给每台服务器设置了一个由小写字母a-z组成的密钥.密钥的易破解程度定义如下: 对于密钥 S_1..S_nS​1​​..S​n​​,我们需要首先计算其对应的 \piπ 数组.对于任意的 i(2 \l ...

  5. 2018 计蒜之道 初赛 第四场

    这次凭借这超强的手速终于打到了Rank76 由于这是手速场,所以题目都偏简单,但惯后面两题还是很不可做的 A. 贝壳找房均价计算 这道题题意很清楚了吧,但是有一个坑点:|Y|表示的是字符串Y的长度,而 ...

  6. 2017 计蒜之道 初赛 第四场 (第二题) B. 商汤科技的行人检测(简单)

    商汤科技近日推出的 SenseVideo 能够对视频监控中的对象进行识别与分析,包括行人检测等.在行人检测问题中,最重要的就是对行人移动的检测.由于往往是在视频监控数据中检测行人,我们将图像上的行人抽 ...

  7. 2018 计蒜之道 初赛 第三场

    这次我是真的菜,对着T1YY了一堆类似于玄学二分+尺取法的东西 原来是个结论题,然后过了20min才去写T2,虽然1次A,但已经崩了 下面开始讲题 A. 贝壳找房性价比 这是一个神坑题,我们将题意抽象 ...

  8. 2017 计蒜之道 初赛 第一场 A题B题

    阿里九游开放平台近日上架了一款新的益智类游戏--成三棋.成三棋是我国非常古老的一个双人棋类游戏,其棋盘如下图所示: 成三棋的棋盘上有很多条线段,只能在线段交叉点上放入棋子.我们可以用坐标系来描述棋盘: ...

  9. 2016计蒜之道复赛 微信钱包付款

    2016计蒜之道复赛  微信钱包付款 一.题意: 微信钱包付款 给定n(0≤n≤10​10000),求a,,b,c使得a+b+c=n,并且f(a)=f(b)=f(c),f(n)定义为n的各数位的和,例 ...

最新文章

  1. linux lab命令,Linux lab 命令
  2. MySQL之简单示例
  3. Javascript玩转继承(一)
  4. leetcode算法题--最多的不重叠子字符串★★
  5. log-slave-updates 引起 MySQL 从节点同步异常慢
  6. 20190101.DDD笔记
  7. matlab compiler 与matlab coder 区别,MATLAB编译器与MATLAB编码器
  8. 区块链和区块链联盟_区块链是安全主题吗?
  9. java文件下载代码_Java代码实现文件下载
  10. 数据:Uniswap V3的24小时交易量已超过2亿美元
  11. 用R设定随机种子的目的和方法
  12. 使用python制作趣味小游戏—投骰子
  13. Java、JSP网上购物管理系统
  14. 计算机网络工程专业大学排名,2020网络工程专业大学排名
  15. 完全删除iCloud注册的Apple ID
  16. Android 手机QQ临时会话
  17. 计算机专业大专学校排名河南的,2020河南大专学校排名榜单
  18. 五姐妹因没嫁妆集体自杀 绝望跳河
  19. 深入理解RocketMQ Rebalance机制
  20. 基于CNN实现视频动作分类任务

热门文章

  1. android性能测试-腾讯GT使用说明
  2. 表示层,业务逻辑层,持久层,数据库(简记)
  3. 【LINUX文件系统管理(1) 实验报告】
  4. 微信整了一个新功能,专治各种借钱不还
  5. win32编程中创建窗口时CW_USEDEFAULT的作用
  6. 【转】WIN32编程中的HRESULT类型和LRESULT类型的区别
  7. 2、Java——for循环打印九九乘法口诀表
  8. CISAW安全运维考试的这些变化,你值得了解!
  9. 宝宝乳糖酶到底怎么选?常见品牌权威评测
  10. IDEA开发工具使用devtools热部署