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\) 的,仅包含字母 GH 的字符串,每行对应一支奶牛队伍。

输出格式

对于每个队伍,输出差异最大值。

\(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 道题之中最有意思的一道题。

本题可以使用广度优先搜索

GH 视为二进制下的 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练习赛的更多相关文章

  1. 2018.11.02 NOIP训练 停车场(线段树)

    传送门 这是一道困饶了我一年的题. 其实就是去年去NOIP提高组试水的时候考的模拟题 但当时我水平不够,跟ykykyk一起杠了一个下午都没调出来. 今天终于AAA了. 其实就是一个维护最长连续0101 ...

  2. 2018.11.02 NOIP模拟 距离(斜率优化dp)

    传送门 分四个方向分别讨论. 每次枚举当前行iii,然后对于第二维jjj用斜率优化dpdpdp. f[i][j]=(j−k)2+mindisk2f[i][j]=(j-k)^2+mindis_k^2f[ ...

  3. 2018.11.02 NOIP模拟 飞越行星带(最小生成树/二分+并查集)

    传送门 发现题目要求的就是从下到上的瓶颈路. 画个图出来发现跟去年noipnoipnoip提高组的奶酪差不多. 于是可以二分宽度+并查集检验,或者直接求瓶颈. 代码

  4. 2018.11.02 NOIP模拟 优美的序列(数论+单调栈/链表)

    传送门 考虑如果一个区间满足最小值等于最大公约数那么这个区间是合法的. 因此我们对于每一个点维护可以延展到的最左/右端点保证这一段区间的gcdgcdgcd等于这个点的值. 这个可以用之前同类的链表或者 ...

  5. star ccm+ 11.02安装

    STAR CCM+是CD-Adapco公司的主打软件,其安装方式较为简单,这里以图文方式详细描述STAR CCM+11.02安装过程. 1 安装准备工作2 正式安装3 软件破解4 软件测试 1 安装准 ...

  6. 11.7 NOIP模拟赛

    目录 2018.11.7 NOIP模拟 A 序列sequence(two pointers) B 锁lock(思路) C 正方形square(埃氏筛) 考试代码 B C 2018.11.7 NOIP模 ...

  7. 【NOIP练习赛】学习

    [NOIP练习赛]T3.学习 Description 巨弱小 D 准备学习,有 n 份学习资料给他看,每份学习资料的 内容可以用一个正整数 ai 表示.小 D 如果在一天内学习了多份资料, 他只能记住 ...

  8. 【NOIP练习赛】开车

    [NOIP练习赛]T2.开车 Description 老司机小 Q 要在一个十字路口指挥车队开车,这个十字路口可 以描述为一个 n*n 的矩阵,其中第 2 行到第 n-1 行都各有一道横向车 道,第 ...

  9. 11/1 NOIP 模拟赛

    11.1 NOIP 模拟赛 期望得分:50:实际得分:50: 思路:暴力枚举 + 快速幂 #include <algorithm> #include <cstring> #in ...

  10. 2021.11.02 eleveni的水省选题的记录

    2021.11.02 eleveni的水省选题的记录 因为eleveni比较菜,所以eleveni决定从绿题开始水 --实际上菜菜的eleveni连绿题都不一定能水过/忍不住哭了 [P2217 HAO ...

随机推荐

  1. 题解:P10329 [UESTCPC 2024] Add

    Add 题意 将序列进行一系列的操作,输出对 \(a_{1}\) 的期望值. 题目中操作说的比较明了,再次就不特殊声明了. 思路 据题意所知,每一个 \(n\) 应该对应了一个固定的答案. 于是我就想 ...

  2. 深度学习 玩游戏 Q-LEARNING

    游戏里面非玩家的角色行为,即 AI. 腾讯的 Ai 游戏框架:TencentOpen. 介绍: Agent,behavior tree, 大概意思就是 通过自己的框架来确定 ai 行为,然后通过 ag ...

  3. Maven创建Web项目(idea)

    web项目创建 Web项目开发需要导入许多的第三方jar包,用Maven创建web项目就可以将这一操作免去. 本项目是在idea下创建的,idea自带Maven,如果还未了解Maven的同学可以看上一 ...

  4. 6、Git之团队协作机制

    6.1.团队内协作 6.1.1.创建本地库 如上图所示,一个名叫刘备的人,在本地电脑中创建了一个项目,并使用 git 来维护. 6.1.2.推送本地库到代码托管中心 如上图所示,刘备想让别人也能看到自 ...

  5. 【Big Data】 DBeaver连接Phoenix

    前言 Phoenix是Hbase数据库的一个SQL化中间件 Hbase本身是一个NoSQL类型的列族库,Phoenix可以将其转换成SQL操作 Phoenix提供的客户端Jar包,可以让DBeaver ...

  6. 【Spring Data JPA】05 方法名限定查询

    方法名限定查询 方法名限定查询是对JPQL的再封装 按照SpringData提供的方法名定义方法,不需要配置JPQL语句即可完成查询 在IDEA中都有相应的提示 他会按照方法字符判断 public C ...

  7. 【Layui】05 选项卡 Tabs

    文档位置: https://www.layui.com/doc/element/tab.html 案例演示: <div class="layui-tab"> <u ...

  8. 强化学习是否可以AI4Science呢?

    最近,华为和Google都推出了AI的天气预报系统(发表了nature.science论文,但是没开放公众使用),可以说这个传统的Science问题已经被AI算法解决,这也说明了传统Science问题 ...

  9. JAVA for Cplex(更新版)

    一.Cplex的介绍 Cplex是一种专门用来求解大规模线性规划问题的求解工具.不仅仅是LP问题,对于二次规划 QP,二次有约束规划QCP,混合整数线性规划MIP问题,甚至Network Flow问题 ...

  10. SMU Summer 2024 Contest Round 6

    SMU Summer 2024 Contest Round 6 Many Formulas 题意 给你一个数,你可以在这个数的任意位之间插入零个或多个+号,形成一个算式,你需要计算所有可能形成的算式的 ...