P8846 『JROI-7』PMK 配匹串符字

简要题意

给出一正整数 \(n(1 \leq n \leq 10^5)\),求出一个由小写英文字母组成的字符串 \(S\),使得 \(|S|=n\) 且 \(\sum_{i=1}^{n}{\operatorname{Next}_i}\) 最小。(如果有多组解,输出任意一组解即可)

注:\(\operatorname{Next}\) 为 \(S\) 的失配数组。

思路

首先失配数组和最小的话当然是 \(0\),那怎么是 \(0\) 呢?考虑失配数组的定义。\(\operatorname{Next}_i\) 为 \(S[1:i]\) 中最长的前缀使其等于后缀的长度。如果 \(\operatorname{Next}_i=0\) 那么不存在前缀=后缀。怎样不存在?直接构造一个 \(\texttt{abbbbbb...}\) 即可。

时间复杂度 \(O(n)\)。

代码

#include <bits/stdc++.h>
using namespace std; signed main(){
int n;
cin>>n;
for(int i=1;i<=n;i++){
if(i==1)putchar('a');else putchar('b');
}
return 0;
}

P8847 [JRKSJ R5] 1-1 A

简要题意

给你一个由 \(1,-1\) 组成的长度为 \(n(1 \leq n \leq 10^6)\) 的序列 \(a\),你需要将其重排,使得最大子段和最小。输出重排后的序列。(如果有多组解,输出任意一组解即可)

思路

首先,直觉告诉我们,一定要 \(\texttt{1 -1 1 -1 ...}\) 这样交错输出。

如果 \(1\) 的数量不等于 \(2\) 的数量呢?我一开始的思路是从中间二分插入,但是这样子是错误的。

事实上,如果 \(-1\) 的数量大于 \(1\) 的数量,我们直接将 \(-1\) 拼到后面去,这样子可以做到最大子段和为 \(1\)。

如果 \(1\) 的数量大于 \(-1\) 的数量呢?我们同样拼到后面去,这样子可以做到最大子段和为 \(\textbf{1 的数量}-\textbf{-1 的数量}\)。

可证明这已经是最优的。

时间复杂度 \(O(n)\)。

代码

#include <bits/stdc++.h>
#define int long long
using namespace std; int n;
int pos,neg; signed main(){
ios::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL);
cin>>n;
for(int i=1,v;i<=n;i++){
cin>>v;
if(v==1)pos++;
else neg++;
}
int init=1;
for(int i=1;i<=n&&pos&&neg;i++){
cout<<init<<' ';
if(init==1)pos--;
else neg--;
init=(-init);
}
if(pos>0){
while(pos--)cout<<1<<' ';
}
if(neg>0){
while(neg--)cout<<-1<<' ';
}
return 0;
}

P8848 [JRKSJ R5] 1-1 B

简要题意

给你一个由 \(1,-1\) 组成的长度为 \(n(1 \leq n \leq 10^4)\) 的序列 \(a\),询问有多少个将 \(a\) 重排后的序列使得该序列的最大子段和最小化。答案对 \(998244353\) 取模。

思路

首先由上题得在 \(1\) 的个数(下设为 \(p\))大于 \(-1\) 的个数)(下设为 \(e\))时,最大子段和的最小值 \(L=\sum a\),在 \(p<e\) 时 \(L=1\),在 \(p=e\) 时 \(L=0\)。

  • 当 \(p\leq e\) 时,与 \(-1\) 和 \(1\) 的位置无关,我们可以直接将 \(-1\) 固定,到里面插入 \(1\)。因此此时答案为 \(\binom{p}{e+1}\)。
  • 当 \(p>e\) 时,与位置有关,我们考虑 DP,设 \(f_{i,j}\) 为前 \(i\) 个数凑出和为 \(j\) 的方案数,则动态转移方程:
\[f_{i,j}=f_{i-1,j-1}+f_{i-1,j+1}\ \ \ \ \ f_{0,0}=1\ \ \ \ \ f_{i,0}=f_{i-1,1}
\]

推导过程 \(f_{i,j}\) 可以从从 \(f_{i-1,j-1}\) 中加上 \(1\) 得来,也可以从 \(f_{i-1,j+1}\) 中减去 \(1\) 得来。\(f_{i,0}\) 只能从 \(f_{i-1,1}\) 中减去 \(1\) 得来。

但是对于 \(1 \leq n \leq 10^4\) 时 \(f\) 空间开不下,需要进行滚动数组优化。

时间复杂度 \(O(n^2)\)(\(p>e\))或 \(O(n\log n)\)(\(p\leq e\))。

代码

#include<bits/stdc++.h>
#define int long long
using namespace std; int f[10005],fold[100005];
int fact[10005];
const int mod = 998244353;
int n,pos,neg,sum; int pow(int a,int b,int mod) {
int ans=1;
for(;b;b>>=1,a=1ll*a*a%mod) {
if(b&1) {
ans=1ll*ans*a%mod;
}
}
return ans;
} int inv(int x){
return pow(x,mod-2,mod);
} int c(int m,int n){
return (fact[n]*inv(fact[m])%mod)*inv(fact[n-m])%mod;
} signed main(){
cin>>n;
for(int i=1,v;i<=n;i++){
cin>>v;
if(v==1)pos++;
else neg++;
sum+=v;
}
if(neg>=pos){
fact[0]=fact[1]=1;
for(int i=2;i<=(n+1);i++){
fact[i]=fact[i-1]*i%mod;
}
cout<<c(pos,neg+1)<<'\n';
return 0;
}
f[0]=fold[0]=1;
for(int i=1;i<=n;i++){
f[0]=fold[1];
for(int j=1;j<=sum;j++){
f[j]=(fold[j-1]+fold[j+1])%mod;
}
memcpy(fold,f,sizeof(f));
}
cout<<f[sum]<<'\n';
return 0;
}

【LGR-125】洛谷 11 月月赛 I & JROI-7 & JRKSJ-5的更多相关文章

  1. 「P4996」「洛谷11月月赛」 咕咕咕(数论

    题目描述 小 F 是一个能鸽善鹉的同学,他经常把事情拖到最后一天才去做,导致他的某些日子总是非常匆忙. 比如,时间回溯到了 2018 年 11 月 3 日.小 F 望着自己的任务清单: 看 iG 夺冠 ...

  2. 「P4994」「洛谷11月月赛」 终于结束的起点(枚举

    题目背景 终于结束的起点终于写下句点终于我们告别终于我们又回到原点…… 一个个 OIer 的竞赛生涯总是从一场 NOIp 开始,大多也在一场 NOIp 中结束,好似一次次轮回在不断上演.如果这次 NO ...

  3. 「LuoguP4995」「洛谷11月月赛」 跳跳!(贪心

    题目描述 你是一只小跳蛙,你特别擅长在各种地方跳来跳去. 这一天,你和朋友小 F 一起出去玩耍的时候,遇到了一堆高矮不同的石头,其中第 ii 块的石头高度为 h_ihi​,地面的高度是 h_0 = 0 ...

  4. 洛谷11月月赛(284pts rank85)

    https://www.luogu.org/contestnew/show/12006 我是比赛完后在去写的 这是我第一次打洛谷月赛,之前一次是比赛完才去看而且写了第一题就没写后面的了 284分,太水 ...

  5. 洛谷11月月赛round.1

    太感动了#2 thwfhk 240 (801ms) 100 100 40   又一张明信片,话说10月的怎么还没收到   P2246 SAC#1 - Hello World(升级版) 题目背景 一天, ...

  6. 洛谷11月月赛round.2

    P3414 SAC#1 - 组合数 题目背景 本题由世界上最蒟蒻最辣鸡最撒比的SOL提供. 寂月城网站是完美信息教室的官网.地址:http://191.101.11.174/mgzd . 题目描述 辣 ...

  7. 洛谷11月月赛题解(A-C)

    心路历程 辣鸡T3卡我1.5h题意,要不是最后nlh跟我解释了一下大样例估计这次是真凉透了.. A P4994 终于结束的起点 打出暴力来发现跑的过最大数据?? 保险起见还是去oeis了一波,然后被告 ...

  8. 【LGR-065】洛谷11月月赛 III Div.2

    临近$CSP$...... 下午打了一发月赛,感觉很爽. 非常菜的我只做了前两题......然而听说前两题人均过...... 写法不优秀被卡到$#1067$...... T1:基础字符串练习题: 前缀 ...

  9. NOIP模拟赛(洛谷11月月赛)

    T1  终于结束的起点 题解:枚举啊... 斐波那契数 第46个爆int,第92个爆long long.... 发现结果一般是m的几倍左右....不用担心T. #include<iostream ...

  10. 【CSGRound2】逐梦者的初心(洛谷11月月赛 II & CSG Round 2 T3)

    题目描述# 给你一个长度为\(n\)的字符串\(S\). 有\(m\)个操作,保证\(m≤n\). 你还有一个字符串\(T\),刚开始为空. 共有两种操作. 第一种操作: 在字符串\(T\)的末尾加上 ...

随机推荐

  1. vue+elementUi实现将数字转化为 对应的字符串内容

    文章目录 1.实现的效果 2.template 3.方法中的数据 4.实际运用 1.实现的效果 数据库状态字段 vue前端效果 2.template prop是你的数据库的字段名称 <el-ta ...

  2. Java并发编程 | Synchronized原理与使用

    Java提供了多种机制实现多线程之间有需要同步执行的场景需求.其中最基本的是Synchronized ,实现上使用对象监视器( Monitor ). Java中的每个对象都是与线程可以锁定或解锁的对象 ...

  3. .NET API 接口数据传输加密最佳实践

    .NET API 接口数据传输加密最佳实践 我们在做 Api 接口时,相信一定会有接触到要给传输的请求 body 的内容进行加密传输.其目的就是为了防止一些敏感的内容直接被 UI 层查看或篡改. 其实 ...

  4. 「浙江理工大学ACM入队200题系列」问题 L: 零基础学C/C++85——完美数

    本题是浙江理工大学ACM入队200题第八套中的L题 我们先来看一下这题的题面. 题面 题目描述 任何一个自然数的约数中都有1和它本身,我们把小于它本身的因数叫做这个自然数的真约数. 如6的所有真约数是 ...

  5. Ajax(下)

    跨域 跨域的概念:非同源请求,均为跨域.如果两个页面拥有相同的协议(protocol),端口(port)和主机(host),那么这两个页面就属于同一个源(origin). 例如:主机:http://w ...

  6. 关于li标签的相关css属性

    1.让li前面的序号变成空心圆 list-style-type: circle;   2.让li前面的序号在div里面 list-style-position: inside;   3.改变li前面的 ...

  7. RSA、DSA 和 ECC 加密算法有什么区别?

    RSA.DSA 和 ECC 加密算法是用于在公钥基础设施中生成密钥的主要算法. 公钥基础设施 (PKI) 用于管理互联网通信和计算机网络中的身份和安全性. 启用 PKI 的核心技术是公钥密码术,这是一 ...

  8. HDLBits答案——Getting started

    Getting started 1 Step one module top_module( output one ); // Insert your code here assign one = 1' ...

  9. OSI传输层TCP与UDP协议、应用层简介、socket模块介绍及代码优化、半连接池的概念

    目录 传输层之TCP与UDP协议 应用层 socket模块 socket基本使用 代码优化 半连接池的概念 传输层之TCP与UDP协议 TCP与UDP都是用来规定通信方式的 通信的时候可以随心所欲的聊 ...

  10. js文字无限循环向上滚动

    html代码 <div id="scroll"> <div id="con1"> <p style="color: re ...