【CF1199 D,E, F】Welfare State // Matching vs Independent Set // Rectangle Painting 1

2019-08-15下午三道练习题CF1199
思路有点难想 but很好实现
这是原网站链接:传送门 这里只完成D, E, F三题

文章目录

  • D:Welfare State
    • 题目大意
    • 正解
    • 瞅瞅代码
  • E:Matching vs Independent Set
    • 题目大意
    • 正解
    • 代码实现
  • F:Rectangle Painting 1
    • 题目大意
    • 正解
    • 代码实现

D:Welfare State

题目大意

=
n个人
接下来一行有n个数,第i个数表示第i个人手上的钱a[i]
q次操作
操作分为两种:
1): 1 x 表示所有人手上的不能低于x ,即钱数少于x的人,把它的钱数变为x
2): 2 x y 表示第x个人的钱变为y
数据范围:
n (1≤n≤2⋅10^5) (0≤ai≤10^9) (1≤q≤2⋅10^5) (1≤p≤n, 0≤x≤10^9) (0≤x≤10^9)

正解

=
第二种操作很好解决,直接赋值覆盖即可
问题就在于第一种操作
如果我们读入一条语句就进行操作,那么就必须在线O(n)操作 坑定会炸!
想一下,在i个人的最后一次2操作j时,那么j+1~q次操作中的1操作都有可能影响i
所以我们就从后往前离线操作,记录到j次操作为止中1操作的最大值,与这个人最后一次2操作进行比较max

瞅瞅代码

#include <cstdio>
#include <iostream>
using namespace std;
#define MAXN 500005
struct node {int kind, x, y;
}a[MAXN];
int n, q, Max;
int res[MAXN];
bool flag[MAXN];
int main() {scanf ( "%d", &n );for ( int i = 1;i <= n;i ++ )scanf ( "%d", &res[i] );scanf ( "%d", &q );for ( int i = 1;i <= q;i ++ ) {a[i].y = -1;scanf ( "%d", &a[i].kind );if ( a[i].kind == 1 ) scanf ( "%d %d", &a[i].x, &a[i].y );else scanf ( "%d", &a[i].x );}for ( int i = q;i >= 1;i -- ) {if ( a[i].kind == 1 ) {if ( flag[a[i].x] ) continue;elseres[a[i].x] = max ( a[i].y, Max );flag[a[i].x] = 1;}elseMax = max ( Max, a[i].x );}for ( int i = 1;i <= n;i ++ ) {if ( ! flag[i] ) res[i] = max ( res[i], Max );printf ( "%d ", res[i] );}return 0;
}

E:Matching vs Independent Set

题目大意

T组数据,第一行输入n,m 共有3n个点,m条边
接下来m行,表示u,v两点之间有无向边相连
1)如果任选n条边,满足这n条边上的点只被一条边覆盖,即这些点的入度和出度和为1.eg:选两条边1,2和2,3就不符合题意因为2被两条边覆盖了
符合题意就输出Matching,第二行输出这n条边的编号
2)如果任选n条边后,满足至少n个点是孤立的,eg:选两条边1,2和2 3那么1,3就满足题意因为它们之间无直接边相连 (且1,3算两个点)
满足题意就输出IndSet,第二行输出这n个点的编号
3)如果都不满足就输出Impossible
(1≤n≤10^5, 0≤m≤5*10^5)1≤vi,ui≤3⋅n)

正解

首先要想明白,根本没有Impossible的可能,证明一下:因为共有3n个点,选n条边,最多也只能覆盖2n个点,那么剩下的n个点也是孤立的。
其次,这个如果是考试一般要绑点,就别想着骗分了
在这里插入图片描述
那么很好想不能满足边,就一定满足点
我们就在线操作,对u,v进行打标,满足边就tot++,最后判断tot输出就好了
还可用打标的flag数组进行答案输出

代码实现

#include <cstdio>
#include <cstring>
#define MAXN 300005
#define MAXM 500005
int n, m, t, cnt;
bool flag[MAXN];
int a[MAXM];
int main() {scanf ( "%d", &t );while ( t -- ) {for ( int i = 1;i <= 3 * n;i ++ )flag[i] = 0;cnt = 0;scanf ( "%d %d", &n, &m );for ( int i = 1;i <= m;i ++ ) {int u, v;scanf ( "%d %d", &u, &v );if ( flag[u] || flag[v] ) continue;else {flag[u] = flag[v] = 1;a[++ cnt] = i;}}if ( cnt >= n ) {printf ( "Matching\n" );for ( int i = 1;i <= n;i ++ )printf ( "%d ", a[i] );printf ( "\n" );}else {printf ( "IndSet\n" );int tot = 0;for ( int i = 1;i <= 3 * n;i ++ ) {if ( tot >= n ) break;if ( ! flag[i] ) {tot ++;printf ( "%d ", i );}}printf ( "\n" );}}return 0;
}

F:Rectangle Painting 1

题目大意

输入n,接下来输入nn的字符矩阵,‘#’, ‘.’
求最少把整个矩阵全都变为‘.’的代价和
自选矩阵大小h
w以及矩阵的位置,然后被这个矩阵所包含的所有点都变为‘.’
代价为max (h, w)
n (1≤n≤50)

正解

首先拿到这个题,坑定暴搜是有分的,但会炸
那我们就思考假设对于一个23的矩阵,那么影响这个矩阵的方案有13+23(把第一行和第二行断开),12+22(把第一列和第二三列断开),22+12(把第一二列和第三列断开)然后在对于每一种断开继续以上操作,直到分出11的矩阵,就知道答案了
所以我们就要记忆化搜索,防止重复遍历超时,不断更新最小值

代码实现

#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
#define MAXN 55
int n;
bool flag[MAXN][MAXN];
int dp[MAXN][MAXN][MAXN][MAXN];
int dfs ( int sx, int sy, int ex, int ey ) {if ( dp[sx][sy][ex][ey] != -1 ) return dp[sx][sy][ex][ey];if ( sx == ex && sy == ey ) return dp[sx][sy][ex][ey] = flag[sx][sy];int result1 = 0x7f7f7f7f, result2 = 0x7f7f7f7f;if ( sx != ex )for ( int i = sx;i < ex;i ++ )result1 = min ( result1, dfs ( sx, sy, i, ey ) + dfs ( i + 1, sy, ex, ey ) );if ( sy != ey )for ( int i = sy;i < ey;i ++ )result2 = min ( result2, dfs ( sx, sy, ex, i ) + dfs ( sx, i + 1, ex, ey ) );return dp[sx][sy][ex][ey] = min ( min ( result1, result2 ), max ( ( ex - sx  + 1 ), ( ey - sy + 1 ) ) );
}
int main() {scanf ( "%d", &n );for ( int i = 1;i <= n;i ++ ) {scanf ( "\n" );for ( int j = 1;j <= n;j ++ ) {char tu;scanf ( "%c", &tu );if ( tu == '#' ) flag[i][j] = 1;else flag[i][j] = 0;}}memset ( dp, -1, sizeof ( dp ) );int result = dfs ( 1, 1, n, n );printf ( "%d", result );return 0;
}

在这里插入图片描述
连A三道,偶的妈呀!大神这是要逆天啦!!!
你这次考了倒数第五名,从倒数第一进步了五名,这么学下去,你不得牛死!
好了代码,或者思路有任何不懂的,在评论区留言,我看见会给你进行答复知道你懂为止在这里插入图片描述 ,让我们下期再见,bye~~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/318412.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

YBTOJ:前缀匹配(AC自动机)

文章目录题目描述解析代码题目描述 解析 做的不错 把trie树真的当成一棵树递归即可 注意一个标记时的问题&#xff1a; void AC(){int lstrlen(s01),pl1;for(int i1;i<l;i){int aask(s0[i]);pltr[pl][a];int kpl;while(k>1){if(ok[k]) break;//注意&#xff01;ok[k]1;…

[HAOI2006]均分数据

[HAOI2006]均分数据 题解&#xff1a; 题目稍微解释一下&#xff1a; 把n个数以分为m组&#xff0c;计算每一组的和&#xff0c;求得到的这m个数的方差。由于分法是任意的&#xff0c;我们要求这些方差中的最小值 我们先用STL中的函数random_shuffle()用来对一个元素序列进行…

Docker最全教程——从理论到实战(八)

在本系列教程中&#xff0c;笔者希望将必要的知识点围绕理论、流程&#xff08;工作流程&#xff09;、方法、实践来进行讲解&#xff0c;而不是单纯的为讲解知识点而进行讲解。也就是说&#xff0c;笔者希望能够让大家将理论、知识、思想和指导应用到工作的实际场景和实践之中…

不定方程(质数与因数)

文章目录题目描述解析代码题目描述 数据范围有误&#xff01;应该是不超过1e6 解析 容易推出&#xff1a; y&#xff08;x∗*∗n!)/(x-n!) 换元&#xff0c;令tx-n&#xff01; 则&#xff1a; yn!(n!)2/t 因为x、y都与t一一对应 所以本题就是求 (n!)2 的因数个数 我们求出n&…

Matlab快速入门

命令行窗口 clc 清屏 clear 清理变量 常用矩阵&#xff1a; x[0:2] 这是转置符号xlinspace(0,2,5) 从0到2分配5个空间xzeros(2,3)两行三列全为0的矩阵、 ones(2)2行2列全为1的方阵 eye(2)单位阵 rand(1,2)产生一行二列的随机数&#xff08;从0到1之间均匀随机数&#xff09;固…

【CF 1191】Tokitsukaze, CSL and Stone Game//Tokitsukaze and Duel//Tokitsukaze and Strange Rectangle

很难想 but很好实现 博弈论专练 传送门 惯例这里只完成D&#xff0c;E&#xff0c;F 话不多说上代码 文章目录D:Tokitsukaze, CSL and Stone Game题目大意题解代码实现E&#xff1a;Tokitsukaze and Duel题目大意题解代码实现E:Tokitsukaze and Strange Rectangle题目大意题解代…

【.NET Core项目实战-统一认证平台】第十一章 授权篇-密码授权模式

上篇文章介绍了基于Ids4客户端授权的原理及如何实现自定义的客户端授权&#xff0c;并配合网关实现了统一的授权异常返回值和权限配置等相关功能&#xff0c;本篇将介绍密码授权模式&#xff0c;从使用场景、源码剖析到具体实现详细讲解密码授权模式的相关应用。.netcore项目实…

YBTOJ:灯光控制(贪心)(公倍数)(暴力枚举)

文章目录题目描述解析代码题目描述 解析 没有想出来 首先可以确定开关要么开一次&#xff0c;要么不动&#xff0c;其他都和这俩是等价的 一开始最先想到的就是贪心的方法&#xff0c;每个开关遍历&#xff0c;如果按下会使答案变好就按下。 但是显然当前的开闭对后面是有后效…

Tree Constructer

题目&#xff1a; 题意&#xff1a; 如果点x和y有连边&#xff0c;当且仅当a[x] or a[y] 260 - 1 &#xff08;两者是充分必要&#xff09; 现在给你边的关系&#xff0c;问你每个点的值应该是多少&#xff1f;&#xff08;给出一种情况即可&#xff09; 题解&#xff1a; …

[USACO19JAN,Platinum]Train Tracking 2

虽然是简单的dp &#xff0c;but真的太难想到了&#xff0c;而且我的码力。。。 Train Tracking 2 【题目描述】 每天特快列车都会经过农场。列车有N节车厢&#xff08;1≤N≤105&#xff09;&#xff0c;每节车厢上有一个1到109之间的正整数编号&#xff1b;不同的车厢可能会…

.netcore 堆栈调用方法小记

1|0背景上午临近午饭时&#xff0c;公司同事反馈验证码被攻击灌水。我们匆忙查询验证码明细&#xff0c;对已频繁出现的IP插入黑名单&#xff0c;但IP仍然隔断时间频繁变动&#xff0c;不得已之下只能先封禁对应公司id的验证码发送功能。年初时候&#xff0c;专门对SSO站点的发…

洛谷P2480:古代猪文(中国剩余定理)(欧拉定理)

传送门 文章目录题目描述解析总结代码题目描述 解析 简单来说&#xff0c;就是求&#xff1a; g∑C(d,n)(d是n的约数&#xff09;mod 999911659 可以先特判一下&#xff0c;999911659|g时&#xff0c;答案为0 否则&#xff0c;可以通过欧拉定理转化为&#xff1a; g∑C(d,n)(d…

杯子 + Kronican

杯子 Kronican 【题目描述】 重庆八中在80周年校庆的时候获捐n个杯子&#xff0c; 每个杯子有两个属性&#xff1a;一个是已装水量 ai&#xff0c;一个是可装水量 bi&#xff08;ai < bi&#xff09;。 从一个杯子向另一个杯子倒 x 单位体积的水需要花费的时间是 x 秒。 现…

微软开源的Trill是什么?

以下是一篇15年的文章的译文&#xff1a;https://dwainegilmer.wordpress.com/2015/01/28/microsoft-trill-for-streaming-analytics-from-microsoft-research/当今许多大数据应用程序套件的重点是数据存储。它们是围绕狭窄范围的数据集设想和设计的&#xff0c;通常是为了组织…

剪纸游戏(博弈论)(SG函数)

文章目录题目描述解析题目描述 解析 本题的关键就是SG函数的定义 尝试了一些自己直观上可能对但题解没有使用的约定方法&#xff08;当然最后证明都是错的 。。。&#xff09;&#xff0c;对SG的理解更深刻了一些 SG0的含义是无法再移动换句话说也就是再移动也对败局于事无补&…

[COCI2017-2018#5] Karte

[COCI2017-2018#5] Karte&#xff0c;简短的代码想到了就AC 这道题是SPJ放心搞 但是我的脑子里面的东西&#xff0c;不用我多说&#xff0c;你们就知道是水和面粉和成的 看招 题 【题目描述】 你有一副共有N张牌的牌&#xff0c;在第i张牌上会有一个数字ai表示在这张牌下面至…

YBTOJ:红与蓝(博弈论)

文章目录题目描述解析代码题目描述 解析 首先&#xff0c;这道题的情境对二人来说是不对称的&#xff0c;所以不太好使用SG函数来求解 但直观上也好考虑 利用树的递归性质可以求出每个节点的颜色是否确定 并确定根的颜色是否确定 如果确定是红就随便涂 确定是蓝就-1 关键在于不…

eShopOnContainers 看微服务④:Catalog Service

服务简介Catalog service&#xff08;目录服务&#xff09;维护着所有产品信息&#xff0c;包括库存、价格。所以该微服务的核心业务为&#xff1a;产品信息的维护库存的更新价格的维护架构模式先看代码结构&#xff08;下图&#xff09;。主要依赖&#xff1a;1、HealthCheck …

【CF 1195】Basketball Exercise/Submarine in the Rybinsk Sea (hard edition)/OpenStreetMap+二维单调队列滑动窗口模板

寡人认为C&#xff0c;E都是比较板的题 butD2也太ex了&#xff0c;大大是被那个mod精给弄疯了&#xff0c;我mod了那么多次还是炸了longlong orz 文章目录二维单调队列模板C&#xff1a;Basketball Exercise题目大意题解代码实现D2&#xff1a;Submarine in the Rybinsk Sea (…

YBTOJ:方程的解(组合数学)(插板法)

文章目录题目描述解析代码题目描述 解析 第一感觉&#xff1a;啥都没感觉出来。。。 直接拿动态规划高精做的 但是只能拿40 重新分析一下这道题&#xff1a; g&#xff08;x&#xff09;首先可以拿快速幂很容易的求出来 问题就转化为了**把g(x)个东西分成k份的方案数 其实答案…