2021-4-4 省选模拟赛(灯,十字路口,密室逃脱)

文章目录

  • 考试复盘
  • A:灯(light)
  • B:十字路口(crossing)
  • C:密室逃脱(escape)

考试复盘

第一题分块虽然明显,但是说实话自己没怎么做过分块的题
就不会做大块的处理。。。(;¬_¬)
今天听H老说分块可以成替代数据结构的骗分暴力对拍神器
这么一听似乎非常有用,今晚要刷一刷了!!
但是我的暴力竟然又挂了!!(*゚Д゚)つミ匚___

第二题没有反应过来这个周期其实相当于是找环,暴力判的,额,结果不言而喻

第三题虽然也看得出来是DPDPDP,但是那个转移方程式确实不可能是我的实力想得到的嘤嘤嘤~~
一般这种有时间关卡的们,隧道等等这种在一条“路”上的1−n1-n1n问题一般都是考察的DPDPDP,贪心,转化为最短路等图论问题,最多来个线段树分治

今天的题目总的来说,考什么算法是非常显而易见的,但是细节以及实现却成为了难点
大纲清晰考察刁钻,千言万语只能化作一句好!很好!非常好!


A:灯(light)

在这里插入图片描述分块
连续段数等于开着的灯数减相邻两个都开着的灯对数
次数<n<\sqrt{n}<n的颜色,直接暴力枚举所在位置更新
次数>n>\sqrt{n}>n的颜色,维护与这种颜色相邻的开着的灯数
每次我们改变>n>\sqrt{n}>n的颜色时,直接用这个算答案

#include <map>
#include <cmath>
#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;
#define Pair pair < int, int >
#define maxn 100005
#define Block 350
vector < int > pos[maxn];
int n, m, Q, ans;
int c[maxn], cnt[maxn], t[maxn], big[Block], MS[maxn];
int g[Block][Block];
bool vis[maxn];int main() {freopen( "light.in", "r", stdin );freopen( "light.out", "w", stdout );scanf( "%d %d %d", &n, &m, &Q );for( int i = 1;i <= n;i ++ ) {scanf( "%d", &c[i] );if( c[i] == c[i - 1] ) i --, n --;else;}for( int i = 0;i <= n;i ++ ) {pos[c[i]].push_back( i ); cnt[c[i]] ++;}int block = sqrt( n ), ip = 0;for( int i = 1;i <= m;i ++ )if( cnt[i] > block ) big[++ ip] = i, MS[i] = ip;else;for( int i = 1;i < n;i ++ )g[MS[c[i]]][MS[c[i + 1]]] ++, g[MS[c[i + 1]]][MS[c[i]]] ++;while( Q -- ) {int x;scanf( "%d", &x );if( vis[x] ) {ans -= cnt[x];if( MS[x] ) {ans += t[x];for( int i = 1;i <= ip;i ++ )if( vis[big[i]] ) ans += g[i][MS[x]];else;}else {for( int i = 0;i < pos[x].size();i ++ ) {ans += vis[c[pos[x][i] - 1]];ans += vis[c[pos[x][i] + 1]];t[c[pos[x][i] - 1]] --;t[c[pos[x][i] + 1]] --;}}}else {ans += cnt[x];if( MS[x] ) {ans -= t[x];for( int i = 1;i <= ip;i ++ )if( vis[big[i]] ) ans -= g[i][MS[x]];else;}else {for( int i = 0;i < pos[x].size();i ++ ) {ans -= vis[c[pos[x][i] - 1]];ans -= vis[c[pos[x][i] + 1]];t[c[pos[x][i] - 1]] ++;t[c[pos[x][i] + 1]] ++;}}}vis[x] ^= 1;printf( "%d\n", ans );}return 0;
}

B:十字路口(crossing)

在这里插入图片描述
在这里插入图片描述
xix_ixi表示第iii次观察的时间(对周期取模)
如果有一个灯在两次观察中都是红灯,可以得到一个形如xi−xj=kx_i-x_j=kxixj=k的方程
将这看做是iii指向jjj权值为kkk的有向边,那么一个环的长度显然是周期的倍数
不难证明最小环就是周期,用floydfloydfloyd求出,时间复杂度为O(m3+nm2)O(m^3+nm^2)O(m3+nm2)
同理设yiy_iyi表示第iii个灯由红变绿的时间,一样的方法,时间复杂度为O(n3+mn2)O(n^3+mn^2)O(n3+mn2)
结合两种方法可以做到O(nmnm)O(nm\sqrt{nm})O(nmnm),哪个小用哪种

#include <cstdio>
#include <vector>
#include <cstring>
using namespace std;
#define maxn 400
#define maxm 100005
#define inf 0x3f3f3f3f
vector < int > G[maxm];
int n, m;
int dis[maxn][maxn];int main() {freopen( "crossing.in", "r", stdin );freopen( "crossing.out", "w", stdout );scanf( "%d %d", &n, &m );for( int i = 1;i <= m;i ++ )G[i].resize( n );for( int i = 1;i <= m;i ++ )for( int j = 0;j < n;j ++ )scanf( "%d", &G[i][j] );memset( dis, 0x3f, sizeof( dis ) );int ans = inf;if( m <= n ) {for( int i = 1;i <= m;i ++ )for( int k = i + 1;k <= m;k ++ )for( int j = 0;j < n;j ++ )if( G[i][j] && G[k][j] ) {if( G[i][j] > G[k][j] )dis[i][k] = G[i][j] - G[k][j];elsedis[k][i] = G[k][j] - G[i][j];}else;for( int k = 1;k <= m;k ++ )for( int i = 1;i <= m;i ++ )for( int j = 1;j <= m;j ++ )dis[i][j] = min( dis[i][j], dis[i][k] + dis[k][j] );for( int i = 1;i <= m;i ++ )ans = min( ans, dis[i][i] );}else {for( int j = 0;j < n;j ++ )for( int k = j + 1;k < n;k ++ )for( int i = 1;i <= m;i ++ )if( G[i][j] && G[i][k] ) {if( G[i][j] > G[i][k] )dis[j][k] = G[i][j] - G[i][k];elsedis[k][j] = G[i][k] - G[i][j];}else;for( int k = 0;k < n;k ++ )for( int i = 0;i < n;i ++ )for( int j = 0;j < n;j ++ )dis[i][j] = min( dis[i][j], dis[i][k] + dis[k][j] );for( int i = 0;i < n;i ++ )ans = min( ans, dis[i][i] );}if( ans == inf ) printf( "-1\n" );else printf( "%d\n", ans );return 0;
}

C:密室逃脱(escape)

在这里插入图片描述在这里插入图片描述
在这里插入图片描述

#include <cstdio>
#include <iostream>
using namespace std;
#define Edge 20000
#define maxn 1005
int n, m;
int a[maxn], b[maxn];
int dp[maxn][Edge + 5];int main() {freopen( "escape.in", "r", stdin );freopen( "escape.out", "w", stdout );scanf( "%d %d", &n, &m );for( int i = 1;i < n;i ++ )scanf( "%d %d", &a[i], &b[i] );for( int i = 0;i < m;i ++ ) dp[1][i] = i;for( int i = 1;i < n;i ++ ) {int maxx = 0;for( int j = 0;j < a[i];j ++ ) {dp[i + 1][j + b[i]] = max( dp[i + 1][j + b[i]], dp[i][j] + b[i] );maxx = max( maxx, dp[i][j] );}for( int j = 0;j < b[i];j ++ )dp[i + 1][j] = max( dp[i + 1][j], maxx + j );for( int j = a[i];j < a[i] + b[i];j ++ )dp[i + 1][j - a[i]] = max( dp[i + 1][j - a[i]], dp[i][j] );for( int j = a[i] + b[i];j <= Edge;j ++ )dp[i + 1][j] = max( dp[i + 1][j], dp[i][j] );}int ans = 0;for( int i = 0;i <= Edge;i ++ )ans = max( ans, dp[n][i] );printf( "%d\n", ans );return 0;
}

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

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

相关文章

张高兴的 .NET Core IoT 入门指南:(二)GPIO 的使用

什么是 GPIOGPIO 是 General Purpose Input Output 的缩写&#xff0c;即“通用输入输出”。 Raspberry Pi 有两行 GPIO 引脚&#xff0c; Raspberry Pi 通过这两行引脚进行一些硬件上的扩展&#xff0c;与传感器进行交互等等。Raspberry Pi B/2B/3B/3B/Zero 引脚图简单的讲&am…

acwing1304. 佳佳的斐波那契

1304. 佳佳的斐波那契 题意&#xff1a; S(n)表示Fibonacci的前n项和mod m T(n)(F12F23F3…nFn)mod m 给n和m&#xff0c;求T(n) 题解&#xff1a; 矩阵快速幂 参考题解 关键在于构造矩阵相乘的形式 代码&#xff1a; #include<bits/stdc.h> #define debug(a,b) pri…

1305. GT考试

1305. GT考试 题意&#xff1a; 准考证长度为n位&#xff0c;不吉利数字有m位&#xff0c;问不出现不吉利数字的准考证有多少种&#xff0c;答案mod K 题解&#xff1a; 动态规划kmp矩阵快速幂 设dp[i][j]表示长度为i&#xff0c;且不包含S串&#xff0c;且末尾部分与S串的…

.NET Core IdentityServer4实战 第二章-OpenID Connect添加用户认证

内容&#xff1a;本文带大家使用IdentityServer4进行使用OpenID Connect添加用户认证作者&#xff1a;zara(张子浩) 欢迎分享&#xff0c;但需在文章鲜明处留下原文地址。在这一篇文章中我们希望使用OpenID Connect这种方式来验证我们的MVC程序&#xff08;需要有IdentityServe…

[CF/AT]各大网站网赛 体验部部长第一季度工作报告

文章目录CodeForces#712 (Div. 1)——1503A. Balance the BitsB. 3-ColoringC. Travelling Salesman ProblemD. Flip the Cards108 (Rated for Div. 2)——1519A. Red and Blue BeansB. The Cake Is a LieC. Berland RegionalD. Maximum Sum of ProductsE. Off by OneCodeforce…

G - Tiling FZU - 2040(未解决)

G - Tiling FZU - 2040 题意&#xff1a; m * n的矩阵&#xff0c;通过任意大小的矩阵&#xff0c;有多少种填充方式&#xff1f; 图片为3 * 2的矩阵有如下填充方式&#xff1a; 题解&#xff1a; 矩阵快速幂 目前还没参透 代码:

I - The Mad Mathematician FZU - 2042(未解决)

I - The Mad Mathematician FZU - 2042 题意&#xff1a; 给你一段伪代码&#xff1a;如图 现在给你A&#xff0c;B&#xff0c;C&#xff0c;D&#xff0c;E&#xff0c;的具体值&#xff0c;问你sum是多少 0<A,B,C,D,E<263-1 题解&#xff1a; 数位dp&#xff1f;…

程序员修仙之路--高性能排序多个文件

点击上方蓝色字体&#xff0c;关注我们菜菜呀&#xff0c;昨天晚上班级空间崩溃了程序员主力 Y总what&#xff1f;菜菜我看服务器上写了很多个日志文件&#xff0c;我看着太费劲了&#xff0c;能不能按照日期排序整合成一个文件呀&#xff1f;程序员主力 Y总Y总要查日志呀&…

【.NET Core项目实战-统一认证平台】第十四章 授权篇-自定义授权方式

上篇文章我介绍了如何强制令牌过期的实现&#xff0c;相信大家对IdentityServer4的验证流程有了更深的了解&#xff0c;本篇我将介绍如何使用自定义的授权方式集成老的业务系统验证&#xff0c;然后根据不同的客户端使用不同的认证方式来集成到统一认证平台。.netcore项目实战交…

D - Covering HDU - 6185(未解决完)

D - Covering HDU - 6185 题意&#xff1a; 4 * n的地板&#xff0c;有无数个1 * 2 和2 * 1 的砖块&#xff0c;问有多少方式填满&#xff1f; 1≤n≤10^18 题解&#xff1a; 矩阵快速幂 代码&#xff1a;

.NET-记一次架构优化实战与方案-前端优化

前言上一篇《.NET-记一次架构优化实战与方案-梳理篇》整理了基本的业务知识&#xff0c;同时也罗列了存在的问题&#xff0c;本篇主要是针对任务列表的页面进行性能优化。该篇主要涉及的是代码实现上的优化&#xff0c;实现上的问题是战术债务&#xff0c;也就是我们平常出现的…

GDOI2022游记

文章目录Day -1Day 0Day 1Day 2Day 3()Day ?~?Day ?Day -1 考前好像写题状态不太好&#xff08;可能是纯粹的懒&#xff09;。 开始写板子&#xff0c;很多算法都很久没碰了&#xff0c;有的调了很久才过。树剖都调了一个多小时&#xff0c;身败名裂。不过想想省选应该不怎…

.NET-记一次架构优化实战与方案-梳理篇

前言程序员输出是他敲写的代码&#xff0c;那么输入就是他思考好的设计。因此不做设计是不存在&#xff0c;设计只分优秀的设计和糟糕的设计。为了避免过度设计浪费成本&#xff0c;需要针对现有业务与问题进行展开。业务梳理是不可避免的。优化是无止尽&#xff0c;为了更有成…

.NET Core 3.0 中的数据库驱动框架 System.Data

虽然没有得到很多关注&#xff0c;但System.Data对于.NET 中任何关系型数据库的访问都至关重要。因为其前身是 ActiveX Data Objects&#xff0c;所以它也被称为 ADO.NET。System.Data 提供了一个通用框架&#xff0c;是构建.NET 数据库驱动程序的基础。该框架提供了数据库驱动…

Matrix Problem

Matrix Problem 题意&#xff1a; 给你一个n * m的二维数据c&#xff0c;c的每个元素值为0或1 现在要求你构造同样大小的数组a和b&#xff0c;要求c[i][j] 1’的话&#xff0c;a[i][j] b[i][j] ‘1’&#xff0c;如果c[i][j] ‘0’.a[i][j]!b[i][j]&#xff0c;且a和b中的1…

ASP.NET Core 实战:基于 Jwt Token 的权限控制全揭露

一、前言在涉及到后端项目的开发中&#xff0c;如何实现对于用户权限的管控是需要我们首先考虑的&#xff0c;在实际开发过程中&#xff0c;我们可能会运用一些已经成熟的解决方案帮助我们实现这一功能&#xff0c;而在 Grapefruit.VuCore 这个项目中&#xff0c;我将使用 Jwt …

[2021-06-19] 提高组新手副本Ⅱ(联网,欧几里得,分解树,开关灯)

文章目录考试心路历程联网titlesolutioncode欧几里得titlesolutioncode分解树titlesolutioncode开关灯titlesolutioncode考试心路历程 佛了佛了&#xff0c;caocaocaocaocaocao 人直接炸嗨升天 并查集直接送走200200200分&#xff01;&#xff01;&#xff01;我屮艸芔茻 T1二…

在.NET Core中设计自己的服务宿主(Service Hosting)框架

很多时候我们都会有设计一个后台服务的需求&#xff0c;比如&#xff0c;传统的Windows Service&#xff0c;或者Linux下的守护进程。这类应用的一个共同特点就是后台运行&#xff0c;并且不占用控制台界面。通常情况下&#xff0c;后台服务在提供服务时&#xff0c;会通过日志…

CF1131 G. Most Dangerous Shark(DP+单调栈优化)

文章目录problemsolutioncodeproblem solution dpi:dp_i:dpi​: 前iii个多米诺骨牌全都倒下的最小花费 li,ril_i,r_ili​,ri​分别表示第iii个多米诺骨牌倒下时所能波及到的最左/右位置 往左倒&#xff0c;则[li,i)[l_i,i)[li​,i)内的牌都可以选择性地先推倒 dpimin⁡{dpjcos…

Cat Virus

Cat Virus 题意&#xff1a; 让你构造一颗树&#xff0c;要求如果一个点为黑&#xff0c;其子树全为黑&#xff0c;白点任意&#xff0c;现在让你构造一棵树&#xff0c;使其染色方案数为K&#xff0c;节点尽可能少 题解&#xff1a; 首先画出k<9的全部情况&#xff0c;并…