11-02 NOIP练习赛
11-02 NOIP练习赛
为什么休息的天还要打练习赛,这不公平!!!!!!!!!! oh no!
但是三道题确实挺简单,也少见的很有意思。
[USACO23OPEN] Milk Sum S
题面翻译
给定数组 \(a_1,...,a_N\) 在数组中依次选出一个元素构成排列 \(b_1,...,b_N\) 。定义 $T = \sum _{i=1} ^N i \times b_i $ 。现在给出 \(Q\) 个操作,每个操作有两个数 \(x\) 和 \(y\) 表示将 \(a_x\) 替换成 \(y\) ,对于每一个操作求出操作后的 \(T\) 的最大值,每次操作后数组还原成原样。
输入格式
The first line contains \(N\).
The second line contains \(a_1\dots a_N\).
The third line contains \(Q\).
The next \(Q\) lines each contain two space-separated integers \(i\) and \(j\).
输出格式
Please print the value of \(T\) for each of the \(Q\) queries on separate lines.
样例输入 #1
5
1 10 4 2 6
3
2 1
2 8
4 5
样例输出 #1
55
81
98
\(1\le N\le 1.5\cdot 10^5\), \(0 \leq a_i \leq 10^8\),\(1\le Q\le 1.5\cdot 10^5\),\(0 \leq j \leq 10^8\).
第一题确实就比较简单,很明显排个序,更大的 \(a_i\) 理应适配给大的 \(i\) 以此来获得最大的 \(T\)。
替换操作又是没有后继性的,所以直接开搞。
朴素思想,将 \(a_i\) 改动以后,其实就是将其放到它该在的地方,在排好的序列中二分找到正确的地方,并把受影响的元素依次移动一个。
考虑对答案的贡献,首先预处理出原始的 \(T\),修改操作即先将 \(a_i\) 的贡献删掉,然后将改动后的新贡献加入,再考虑受影响的部分,预处理一个前缀和,受影响部分的贡献其实就是这段区间的综合。时间复杂度 \(O(nlogn)\)。
第一个样例解释
AC 代码:
#include<bits/stdc++.h>
using namespace std;
#define N 500005
#define int long long
long long a[N],f[N],pre[N],T=0;
long long n,q;
//我没有下一个运动会可以拿来错过了。
signed main(){
freopen("a.in","r",stdin);
freopen("a.out","w",stdout);
scanf("%lld",&n);
for(int i=1;i<=n;i++){
scanf("%lld",&a[i]);
f[i]=a[i];
}
sort(f+1,f+1+n);
for(int i=1;i<=n;i++){
T+=f[i]*i;pre[i]=f[i]+pre[i-1];
}
scanf("%lld",&q);
while(q--){
long long x,y;
scanf("%lld%lld",&x,&y);
int i=upper_bound(f+1,f+n+1,a[x])-f-1;
int j=upper_bound(f+1,f+n+1,y)-f;
// printf("%d %d\n",i,j);
long long ans=T;
if(i>=j) ans=T-i*a[x]+j*y+pre[i-1]-pre[j-1];
else ans=T-i*a[x]+(j-1)*y+pre[i]-pre[j-1];
printf("%lld\n",ans);
}
return 0;
}
十年 OI 一场空,不开 long long 见祖宗
是的,赛时没开 long long 直接挂 18 分。
[USACO23OPEN] Field Day S
题目描述
Farmer John 的 \(N\) 个牛棚都会选出包含 \(C\) 只奶牛的队伍去参加户外聚会。所有奶牛的品种都只可能是根西牛(G
)或荷斯坦奶牛(H
)。
我们将两个奶牛队伍中,同一位置对应的两头奶牛品种不同的所有位置 \(i(1 \leq i \leq C)\) 的个数,定义为的两个奶牛队伍的差异。对于编号 \(1...N\) 的每个奶牛队伍 \(t\),请计算出 \(t\) 和其它所有队伍的差异的最大值。
输入格式
第一行包含两个整数 \(C\) 与 \(N\)。
接下来 \(N\) 行,每行有一个长度为 \(C\) 的,仅包含字母 G
和 H
的字符串,每行对应一支奶牛队伍。
输出格式
对于每个队伍,输出差异最大值。
\(2 \leq N \leq 10^5,1 \leq C \leq 18\)。
样例输入 #1
5 3
GHGGH
GHHHH
HGHHG
样例输出 #1
5
3
5
无法理解这道题 \(O(n^2)\) 只给我 5 分什么意思,感觉这道题太简单了吗?
这道题也是我感觉 3 道题之中最有意思的一道题。
本题可以使用广度优先搜索。
将 G
和 H
视为二进制下的 0 和 1,本题就可以转化成:
\(∀1≤i≤n\),求 \(\max popcount(a_i⨁a_j)\) 的值。
考虑广搜,对于每个给出的整数为源点开始搜。每次搜与它只差一位的数,若该数没被搜过,该数距离 +1,将该整数放入队列。
这样跑完以后,每个数对应的距离就是他们和他们相差位数最少的数差几位。注意是所有的数全部跑一边,处理出离他们最近的原点。
那么,我想要找到与 \(a_i\) 每位差的最远的数,就把 \(a_i\) 取反以后找和它每位差的最少的数,也就是我们刚刚跑出来的距离。
AC 代码:
#include<bits/stdc++.h>
using namespace std;
int main(){
freopen("b.in","r",stdin);
freopen("b.out","w",stdout);
ios::sync_with_stdio(false);
int c,n; cin>>c>>n;
vector<int> a(n),m(1<<c,-1);
queue<pair<int,int> > q;
for(auto &i:a){
for(int j=0;j<c;j++){
char x; cin>>x;
if(x=='G')i|=1<<j;
}
q.emplace(i,m[i]=0);
}
while(!q.empty()){
auto [u,w]=q.front(); q.pop();
for(int i=0;i<c;i++)
if(int v=u^(1<<i);m[v]==-1)
q.emplace(v,m[v]=w+1);
}
for(int i:a)cout<<c-m[(1<<c)-1^i]<<endl;
return 0;
}
[USACO23OPEN] Pareidolia S
题面翻译
Farmer John有的时候看东西会忽略一些字母,如把 bqessiyexbesszieb
看成 bessiebessie
。定义 \(B(s)\) 表示把 \(s\) 中的若干个字母删去后,形成尽量多个 bessie
相连的形式 (bessiebessiebessieb...
),返回 bessie
的最大数量。如 \(B(\text{"bqessiyexbesszieb"})=2\)。对字符串 \(s\) 计算 \(B(s)\) 是一个有趣的挑战,但FJ想到了一个更有趣的挑战:对 \(s\) 的所有子串进行计算B函数,并求和。\(s\) 的长度不超过 \(3\times 10^5\)。
样例输入 #1
bessiebessie
样例输出 #1
14
第三题题意还是比较简单 ,但是要 \(O(n)\) 做出来还是需要一些技巧。
这道题的关键是抓住每一个 bessie
对答案的贡献,而不能抓子串。
考虑类似动态规划的思路,对于每一个 \(i\),我们令 \(f_i\) 表示 以 \(i\) 作为结尾的区间中总共有多少 bessie
。然后从头到尾统计答案,对于每个 \(i\) 我们统计以 \(a_i\) 结尾的所有子串能有多少贡献,看代码,还是比较好理解,不行就拿样例理解理解。
AC 代码:
#include<bits/stdc++.h>
#define LL long long
using namespace std;
const LL N=5e5;
char c[N];
LL n,lst[N],f[N],ans;
int main(){
freopen("c.in","r",stdin);
freopen("c.out","w",stdout);
scanf("%s",c+1);
n=strlen(c+1);
for(int i=1;i<=n;i++){
if(c[i]=='b')lst[1]=i;
if(c[i]=='e')lst[2]=lst[1],lst[6]=lst[5];
if(c[i]=='s')lst[4]=lst[3],lst[3]=lst[2];
if(c[i]=='i')lst[5]=lst[4];
f[i]=f[lst[6]-1]+lst[6];
ans+=f[i];
}
printf("%lld",ans);
return 0;
}
11-02 NOIP练习赛的更多相关文章
- 2018.11.02 NOIP训练 停车场(线段树)
传送门 这是一道困饶了我一年的题. 其实就是去年去NOIP提高组试水的时候考的模拟题 但当时我水平不够,跟ykykyk一起杠了一个下午都没调出来. 今天终于AAA了. 其实就是一个维护最长连续0101 ...
- 2018.11.02 NOIP模拟 距离(斜率优化dp)
传送门 分四个方向分别讨论. 每次枚举当前行iii,然后对于第二维jjj用斜率优化dpdpdp. f[i][j]=(j−k)2+mindisk2f[i][j]=(j-k)^2+mindis_k^2f[ ...
- 2018.11.02 NOIP模拟 飞越行星带(最小生成树/二分+并查集)
传送门 发现题目要求的就是从下到上的瓶颈路. 画个图出来发现跟去年noipnoipnoip提高组的奶酪差不多. 于是可以二分宽度+并查集检验,或者直接求瓶颈. 代码
- 2018.11.02 NOIP模拟 优美的序列(数论+单调栈/链表)
传送门 考虑如果一个区间满足最小值等于最大公约数那么这个区间是合法的. 因此我们对于每一个点维护可以延展到的最左/右端点保证这一段区间的gcdgcdgcd等于这个点的值. 这个可以用之前同类的链表或者 ...
- star ccm+ 11.02安装
STAR CCM+是CD-Adapco公司的主打软件,其安装方式较为简单,这里以图文方式详细描述STAR CCM+11.02安装过程. 1 安装准备工作2 正式安装3 软件破解4 软件测试 1 安装准 ...
- 11.7 NOIP模拟赛
目录 2018.11.7 NOIP模拟 A 序列sequence(two pointers) B 锁lock(思路) C 正方形square(埃氏筛) 考试代码 B C 2018.11.7 NOIP模 ...
- 【NOIP练习赛】学习
[NOIP练习赛]T3.学习 Description 巨弱小 D 准备学习,有 n 份学习资料给他看,每份学习资料的 内容可以用一个正整数 ai 表示.小 D 如果在一天内学习了多份资料, 他只能记住 ...
- 【NOIP练习赛】开车
[NOIP练习赛]T2.开车 Description 老司机小 Q 要在一个十字路口指挥车队开车,这个十字路口可 以描述为一个 n*n 的矩阵,其中第 2 行到第 n-1 行都各有一道横向车 道,第 ...
- 11/1 NOIP 模拟赛
11.1 NOIP 模拟赛 期望得分:50:实际得分:50: 思路:暴力枚举 + 快速幂 #include <algorithm> #include <cstring> #in ...
- 2021.11.02 eleveni的水省选题的记录
2021.11.02 eleveni的水省选题的记录 因为eleveni比较菜,所以eleveni决定从绿题开始水 --实际上菜菜的eleveni连绿题都不一定能水过/忍不住哭了 [P2217 HAO ...
随机推荐
- 毕业设计&毕业项目:基于springboot+vue实现的在线音乐平台
一.前言 在当今数字化时代,音乐已经成为人们生活中不可或缺的一部分.随着技术的飞速发展,构建一个用户友好.功能丰富的在线音乐平台成为了许多开发者和创业者的目标.本文将介绍如何使用SpringBoot作 ...
- IDEA整合Spring+Struts+Hibernate项目
新手使用idea整合Spring+Struts+Hibernate项目 项目所需jar下载: https://download.csdn.net/download/weixin_44906002/12 ...
- linux环境部署搭建流程
linux环境部署搭建流程 1,ubuntu/centos系统安装 2,ip网络配置 3,路由和防火墙 4,时间同步服务器 5,ssh协议配置(Windows安装xshell/secureCRT) 6 ...
- 《最新出炉》系列初窥篇-Python+Playwright自动化测试-59 - 判断元素是否显示 - 上篇
1.简介 有些页面元素的生命周期如同流星一闪,昙花一现.我们也不知道这个元素在没在页面中出现过,为了捕获这一美好瞬间,让其成为永恒.我们就来判断元素是否显示出现过. 在操作元素之前,可以先判断元素的状 ...
- 【SpringBoot】日志在项目中的应用
日志的目的: 为了方便日后的运维,快速定位BUG,错误信息等等 日志算是一个救命稻草 pom.xml需要的依赖: <?xml version="1.0" encoding=& ...
- 如何理解自动驾驶的分级:L0、L1、L2、L3、L4、L5
相关: https://baijiahao.baidu.com/s?id=1792281493472406727&wfr=spider&for=pc L0,就是完全没有自动驾驶技术的车 ...
- 代码随想录Day11
150. 逆波兰表达式求值 给你一个字符串数组 tokens ,表示一个根据 逆波兰表示法 表示的算术表达式. 请你计算该表达式.返回一个表示表达式值的整数. 注意: 有效的算符为 '+'.'-'.' ...
- 如何让您的 .NET应用程序更智能-- 请参加 8.20 的 .NET Conf -- Focus on AI
Microsoft 将于 2024 年 8 月 20 日举办免费的 .NET Conf: Focus on AI.该虚拟活动为开发人员提供了如何集成 .NET 和 AI 以增强应用程序开发和用户体验的 ...
- SMU Summer 2024 Contest Round 8
SMU Summer 2024 Contest Round 8 Product 思路 注意到 \(\prod\limits_{i=1}^NL_i\le10^5\),也就是说 N 不会超过 16,因为 ...
- SMU Spring 2023 Trial Contest Round 1
A. Prepend and Append 用ans记录n的值,然后双指针从前后判断是否一个为0一个为1,是的话则ans-2,否则退出循环即可. #include<bits/stdc++.h&g ...