首页 > 其他分享 >暑假牛客多校第八场 2023-8-11(H、K)

暑假牛客多校第八场 2023-8-11(H、K)

时间:2023-08-13 18:11:49浏览次数:41  
标签:11 typedef 排列 匹配 多校 back 牛客 奇偶性 include

H. Insert 1, Insert 2, Insert 3, ...


算法:

做法:
      我们分析题目发现每个区间的左端点一定是 \(1\),而且每个新加入的数 \(x\) 一定是匹配最靠近它的且未经匹配的 \(x - 1\)。举个例子,在[1,1,2,2,3]中我们加入一个数 \(3\) 时由于从左到右的第二个 \(2\) 是已经和第一个 \(3\) 匹配了,所以新加入的 \(3\) 应该和第一个 \(2\) 匹配,且第二个 \(1\) 和第一个 \(2\) 匹配,第一个 \(1\) 和第二个 \(2\) 匹配。那么新加入的 \(3\) 应该是和从左到右第一个 \(1\) 和第二个 \(2\) 匹配成一组。再举个例子,在区间[1,1,2,2]中,我们新加入一个 \(3\),那么 \(3\) 应该和最近的且未经匹配的 \(x - 1\) 匹配,那么匹配的数就是第二个 \(2\) 了,若匹配第二个 \(2\),那么第二个区间[1][1,2,2,3]就不是一个合法区间了。
      我们每次加入一个数,找到最靠近它的匹配数,然后定位最靠近它的且和这个数是一组的 \(1\),如果最靠近它的 \(1\) 左边还有 \(1\),那么加上这些 \(1\) 区间会不同且区间合法。另外如果找到的这个最靠近它的 \(1\) 右边还有 \(1\) ,那么右边的所有 \(1\)(不超过右边界)都不能成为左区间端点,即右边的所有的匹配的 \(1\) 已经确定了,那么下次完成找匹配 \(x\) 的 \(1\) 还想再加 \(1\) 来增加不同区间就应该以这个新确定的 \(1\) 往左找 \(1\)的数量。如果新加入的数完全找不到可以匹配的 \(x - 1\),那么这段区间就可以跳过了。

code
#include <iostream>
#include <cstring>
#include <algorithm>
#include <vector>
#include <map>
#include <queue>
#include <stack>
#include <deque>
#include <cmath>
#include <string>
#include <set>
#define x first
#define y second
#define endl '\n'
using namespace std;

typedef long long LL;
typedef unsigned long long ULL;
typedef pair<int, int> PII;
typedef pair<double, int> PDI;
typedef pair<double, double> PDD;
typedef pair<int, string> PIS;
int dx[4] = { -1, 1, 0, 0 }, dy[4] = { 0, 0, -1, 1 };

const int N = 1000010, M = 200100, INF = 0x3f3f3f3f, mod = 998244353, TIME = 50001;

int n;
LL ans;
vector<int> p[N], s;

void solve()
{
    cin >> n;
    for (int i = 1, x, y; i <= n; i++)
    {
        cin >> x; x--;
        if (x == 0)p[1].push_back(i), s.push_back(i), ans += s.size();
        else if (p[x].empty())s.clear();
        else
        {
            y = p[x].back(), p[x].pop_back(), p[x + 1].push_back(y);
            while (s.back() > y)s.pop_back();
            ans += s.size();
        }
    }
    
    cout << ans << endl;
}

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0), cout.tie(0);
    int t = 1;
    while (t--)
    {
        solve();
    }
    return 0;
}

 

K. Scheming Furry


算法:对于一个1,2,3,... ,n的排列我们有如下定理。

  • 排列的逆序数为奇数时为奇排列,为偶数时为偶排列。
  • 排列的奇排列和偶排列数量相同,各为 \(\frac{n!}{2}\) 个。
  • 每一次对排列的任意两个数进行变换时,逆序数的奇偶性会变换。

做法:首先我们注意到如果狐狸一开始只用一次就可以使矩阵有序,那么狐狸赢。其次\(n \ge 3\) 并且 \(m \ge 3\) 时两者为了都不让对方赢,总有办法做一些使对方不能成功排序的做法。当 \(n = 2\) 且 \(m \ge 3\) 时,第一列的逆序数的奇偶性和第一行的奇偶性相同时就是猫赢,否则平局。

解释:猫想要赢,一定是在狐狸把它第一列排成有序后猫再做一次使这第一行有序。我们知道排列有序的序列一定是逆序数为 \(0\) 的排列,那么其一定是偶排列。而一开始第一列可以是有序也可以是无序,如果是有序,则为偶排列,那么我们就象征性的设其为偶数就好了,无序的话可能是奇排列也可能是偶排列,但由于只有两个数,那么必定是奇排列了。猫如果是奇排列,那么狐狸也应该是奇排列。这样最后一步时,狐狸是偶排列,猫是奇排列,再下一步就是偶排列,得到排序矩阵。猫是偶排列同理。

       当 \(n \ge 3\) 且 \(m = 2\) 时,第一列的逆序数的奇偶性和第一行的奇偶性不相同则狐狸赢,否则平局。当 \(n = 2\) 且 \(m = 2\) 时,若两个序列都倒序,则猫赢,若第一列有序而第一行倒序,则狐狸赢。

标签:11,typedef,排列,匹配,多校,back,牛客,奇偶性,include
From: https://www.cnblogs.com/dkdklcx/p/17625226.html

相关文章

  • 牛客sql-计算用户的平均次日留存率
    参考大佬题解做一下记录:https://blog.nowcoder.net/n/fe24f96a26f1437da19e91ab1d035b03?f=commenthttps://blog.nowcoder.net/n/dd3d75ce08e3485c95bafe3c23668fc2?f=comment https://www.runoob.com/sql/sql-dates.htmlDATE_ADD(date,intervalexprtype) date参数是合......
  • t113-c-触摸篇
    学一下如何添加触摸先在menuconfig里面寻找是否有GT911但是结果并没有找得到那么在kernel_menuconfig中是否有呢也没见有,但是我找到了gt9xx这个选项估计就是这个了,那就不用添加驱动了把它选上board.dts设备树中也应该看一看,这中驱动硬是在iic也就是twi总线下的,果然在twi......
  • Windows 11 自动应答XML注释版
    详细的介绍了Win11自动应答XML各标记的名称、用途:还等什么?访问http://oldhelps.html-5.me,搜索Windows11自动应答XML注释版就是他......
  • mysql在开启group_replication后,状态显示为RECOVERING,告警日志报错MY-013117、MY-0115
    问题描述:mysql在开启group_replication后,状态显示为RECOVERING,告警日志报错MY-013117、MY-011582、MY-011583,如下所示:数据库:MySQL8.0.27系统:rhel7.364位1、问题重现Slave02[(none)]>select*fromperformance_schema.replication_group_members;+-----------------------......
  • win11怎么关闭病毒和威胁防护?
    win11怎么关闭病毒和威胁防护?随着Windows11的发布,微软为我们带来了许多新功能和改进,其中包括更强大的病毒和威胁防护功能。有时候您可能希望关闭这些功能,以便获得更好的性能或者使用其他第三方安全软件。win11怎么关闭病毒和威胁防护?步骤1打开“设置”应用程序首先,点击Win11任务......
  • Windows11 操作系统 SysWOW64 文件夹的作用
    Windows11操作系统中的SysWOW64文件夹是一个重要的系统目录,它在某些方面扮演着特殊的角色。在这篇文章中,我将详细介绍SysWOW64文件夹的作用,并举例说明它在操作系统中的具体应用。首先,让我们了解一下该文件夹的背景和目的。SysWOW64文件夹是Windows64位操作系统中的一个......
  • 仿微信聊天程序 - 11. 服务端
    本文是仿微信聊天程序专栏的第十一篇文章,主要记录了【米虫IM-服务端】的实现。界面设计仿微信聊天程序的服务端正常来说可能不需要界面,但是为了配置和调试方便,还是开发了一下简单的界面,主要由两部分组成:服务端域名(或IP)端口配置收发数据包日志打印Spring集成仿微信聊天程......
  • Oracle 11g
    Oracle读书笔记参考文档:FreeIT教程w3cschool教程《Oracle从入门到精通(第3版)明日科技》第1章Oracle11g概述1.1简述Oracle的发展史1.2关系型数据库的基本理论1.2.1关系型数据库与数据库管理系统1.2.2关系型数据库的E-R模型1.2.3关系型数据库的设......
  • 8.11模拟赛小结
    前言最无语的一集T1数对原题给定整数\(L,R\(L\\le\R)\),请计算满足以下条件的整数对\((x,y)\)的数量:\(L\\le\x,y\\le\R\)设\(g\)是\(x,y\)的最大公约数,则满足以下条件:\(g\\neq\1\)且\(\frac{x}{g}\\neq\1\)且\(\frac{y}{g}\\neq\1\)很简单的......
  • oracle归档日志暴增原因分析,Oracle归档日志满导致数据库性能异常慢 转发 https://b
    ============= oracle数据库archivelog暴增分析====================前言归档量突然增长到981G/天,导致归档目录使用率告警归档日志量异常暴增会导致磁盘空间爆满,数据库异常1、归档日志量统计SELECTTRUNC(FIRST_TIME)"TIME",SUM(BLOCK_SIZE*BLOCKS)/1024/1024/102......