YAOI Round #7 题解
前言
比赛链接:
Div.1 : http://47.110.12.131:9016/contest/16
Div.2 : http://47.110.12.131:9016/contest/15
Div.2——Angel Beats!
下面是 Div.2 的题解。
A. Favorite Flavor
对于 \(40\%\) 的数据,考虑 \(O(n)\) 预处理,然后 \(O(1)\) 求解,时间复杂度为 \(O(n+q)\)。
对于 \(100\%\) 的数据,考虑在线处理,即模拟题意过程,时间复杂度为 \(O(q\log n)\)
但实际上,本题有 \(O(\log^3 n+q)\) 的做法,即预处理的时候考虑分别枚举 \(2,3,5\) 的次幂,然后 \(O(1)\) 求解。
scanf("%d",&q);
while(q--)
{
ans=0;
scanf("%lld",&n);
while(n%5==0) ans+=3,n/=5;
while(n%3==0) ans+=2,n/=3;
while(n%2==0) ans+=1,n/=2;
if(n>1) continue;
else res^=ans;
}
printf("%d",res);
B. Dancer in the Dark
对于 \(40\%\) 的数据,枚举所有情况,时间复杂度约为 \(O(n^m)\)。
对于 \(100\%\) 的数据,我们容易算得答案为 \(m^n-m\times (m-1)^{n-1}\),于是快速幂求解即可,时间复杂度为 \(O(\log n)\)。
printf("%d",((qpow(m,n)-1ll*m*qpow(m-1,n-1))%mod+mod)%mod);
C. In Your Memory
咕咕咕……
D. Change the World
咕咕咕……
E. Stairway to Heaven
对于 \(20\%\) 的数据,枚举每个数的颜色,时间复杂度为 \(O(n^n)\),还需要稍微卡卡常。
对于 \(50\%\) 的数据,我们仔细思考一下这个问题,它其实就是求最长不上升子序列的长度(可以自己手模几组试试),于是随便 \(O(n^2)\) 求解。
对于 \(100\%\) 的数据,在求最长不上升子序列长度的时候考虑二分转移,或者树状数组维护,这都非常经典,时间复杂度为 \(O(n\log n)\)。
dp[m=1]=a[1];
for(Re int i=2;i<=n;i++)
{
if(dp[m]>a[i]) dp[++m]=a[i];
else dp[lower_bound(dp+1,dp+m+1,a[i],greater<int>())-dp]=a[i];
}
printf("%d",m);
Div.1——玉子市场
下面是 Div.1 的题解。
A. ドラマチックマーケットライド
咕咕咕……
B. ねぐせ
咕咕咕……
C. プリンシプル
这题出题人也想不出什么部分分做法,于是就不给部分分了(
我们只需要考虑在原图的一棵生成树上怎样构造答案即可。
由于图连通,故一定有解。
以 \(1\) 号节点为根,节点上的整数设为任意值,然后遍历一下原图。
当遍历到一条边 \((u,v,c)\) 时,若 \(num[u]=c\),则 \(num[v]\not=num[u]\);否则,\(num[v]=c\)。
这样做的话,得到的显然是连通的,时间复杂度为 \(O(n+m)\)。
inline void dfs(int u)
{
for(Re int i=hd[u];i;i=e[i].nxt)
{
int v=e[i].ver,c=e[i].val;
if(cl[v]) continue;
if(c==cl[u]) cl[v]=(cl[u]+1)%n+1;
else cl[v]=c;
dfs(v);
}
}
D. 星とピエロ
对于 \(20\%\) 的数据,考虑枚举第 \(k\) 小的数是哪一个,然后检验用显然的 DP 去做,时间复杂度为 \(O(n^2ms)\)。
对于 \(60\%\) 的数据,考虑在枚举第 \(k\) 小的数的时候二分一下,DP 不变,时间复杂度为 \(O(nms\log n)\)。
对于 \(100\%\) 的数据,考虑记录一个数组 \(nxt[i]\) 表示包含第 \(i\) 个点的线段最右端,然后去进行 DP 就会发现 \(m\) 没用了,时间复杂度为 \(O(ns\log n)\)。
#include<bits/stdc++.h>
#define Re register
using namespace std;
const int N=5005;
int n,m,s,k,a[N],aa[N],ans=-1;
int nxt[N],sum[N],f[N][N];
inline bool check(int mid)
{
memset(f,0,sizeof f);
for(Re int i=1;i<=n;i++)
{
sum[i]=sum[i-1]+(a[i]<=aa[mid]);
}
for(Re int i=1;i<=s;i++)
{
for(Re int j=1;j<=n;j++)
{
f[i][j]=max(f[i][j],f[i-1][j]);
}
for(Re int j=0;j<=n;j++)
{
if(nxt[j])
{
f[i][nxt[j]]=max(f[i][nxt[j]],f[i-1][j-1]+sum[nxt[j]]-sum[j-1]);
}
}
for(Re int j=1;j<=n;j++)
{
f[i][j]=max(f[i][j],f[i][j-1]);
}
}
return f[s][n]>=k;
}
int main()
{
scanf("%d%d%d%d",&n,&m,&s,&k);
for(Re int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
aa[i]=a[i];
}
sort(aa+1,aa+n+1);
for(Re int i=1;i<=m;i++)
{
int l,r;
scanf("%d%d",&l,&r);
for(Re int j=l;j<=r;j++)
{
nxt[j]=max(nxt[j],r);
}
}
int l=1,r=n,mid;
while(l<=r)
{
mid=l+r>>1;
if(!check(mid)) l=mid+1;
else ans=aa[mid],r=mid-1;
}
printf("%d",ans);
return 0;
}
E. うさぎ山から爱をこめて
咕咕咕……
YAOI Round #7 题解的更多相关文章
- YAOI Round #5 题解
前言 比赛链接: Div.1 : http://47.110.12.131:9016/contest/13 Div.2 : http://47.110.12.131:9016/contest/12 D ...
- YAOI Round #3 题解
前言 比赛链接: Div.1 : http://47.110.12.131:9016/contest/7 Div.2 : http://47.110.12.131:9016/contest/8 Div ...
- YAOI Round #1 题解
前言 比赛网址:http://47.110.12.131:9016/contest/3 总体来说,这次比赛是有一定区分度的, \(\text{ACM}\) 赛制也挺有意思的. 题解 A. 云之彼端,约 ...
- Codeforces Round #556 题解
Codeforces Round #556 题解 Div.2 A Stock Arbitraging 傻逼题 Div.2 B Tiling Challenge 傻逼题 Div.1 A Prefix S ...
- LibreOJ β Round #2 题解
LibreOJ β Round #2 题解 模拟只会猜题意 题目: 给定一个长为 \(n\) 的序列,有 \(m\) 次询问,每次问所有长度大于 \(x\) 的区间的元素和的最大值. \(1 \leq ...
- Codeforces Round #569 题解
Codeforces Round #569 题解 CF1179A Valeriy and Deque 有一个双端队列,每次取队首两个值,将较小值移动到队尾,较大值位置不变.多组询问求第\(m\)次操作 ...
- Codeforces Round #557 题解【更完了】
Codeforces Round #557 题解 掉分快乐 CF1161A Hide and Seek Alice和Bob在玩捉♂迷♂藏,有\(n\)个格子,Bob会检查\(k\)次,第\(i\)次检 ...
- CFEducational Codeforces Round 66题解报告
CFEducational Codeforces Round 66题解报告 感觉丧失了唯一一次能在CF上超过wqy的机会QAQ A 不管 B 不能直接累计乘法打\(tag\),要直接跳 C 考虑二分第 ...
- Google kickstart 2022 Round A题解
Speed Typing 题意概述 给出两个字符串I和P,问能否通过删除P中若干个字符得到I?如果能的话,需要删除字符的个数是多少? 数据规模 \[1≤|I|,|P|≤10^5 \] 双指针 设置两个 ...
随机推荐
- 「 洛谷 」P2151 [SDOI2009]HH去散步
小兔的话 欢迎大家在评论区留言哦~ HH去散步 题目限制 内存限制:125.00MB 时间限制:1.00s 标准输入 标准输出 题目知识点 动态规划 \(dp\) 矩阵 矩阵乘法 矩阵加速 矩阵快速幂 ...
- Go语言流程控制03--goto跳转到任意标签位置
package main import ( "fmt" "time" ) func main() { STUDYHARD: fmt.Println(" ...
- 高并发Flask服务部署
高并发Flask服务部署 AI模型持久化 OOP: 利用面向对象思想,实现算法在内存上的实例化及持久化.即一次模型加载,多次请求调用. class ocr_infer_class(threading. ...
- MegEngine 框架设计
MegEngine 框架设计 MegEngine 技术负责人许欣然将带了解一个深度学习框架是如何把网络的定义逐步优化并最终执行的,从框架开发者的视角来看待深度学习. 背景 AI 浪潮一波又一波,仿佛不 ...
- TensorFlowMNIST数据集逻辑回归处理
TensorFlow逻辑回归处理MNIST数据集 本节基于回归学习对 MNIST 数据集进行处理,但将添加一些 TensorBoard 总结以便更好地理解 MNIST 数据集. MNIST由https ...
- 图分析Rapids cuGraph
图分析Rapids cuGraph 英伟达(Nvidia)建立的新的开源库可能是推进分析和使图形数据库更快的秘密要素. 在Nvidia GPU上进行并行处理. Nvidia很久以前就不再只是" ...
- CAP 超详细名词解释
目录 引言 概述 分布式 一致性 ACID中的一致性 可用性 分区容错性 可用性与分区容错性,傻傻分不清 问题1:分区容错性说分区故障正常工作,什么叫正常工作?这个正常工作是指满足可用性吗? 问题2: ...
- python+selenium基础篇,cookie绕过验证码小案例
1.绕过验证码有许许多多的方法,笔者在此介绍其中的一个小方法,原理其实就是获取已登陆了之后的凭证(会话保存在本地的cookie中)再打开另一个页面的使用 2.F12(浏览器开发者调试工具)可以查看的需 ...
- Qt中的布局浅析与弹簧的使用,以及Qt居中的两种方法
1. 布局 为什么要布局: 布局之后窗口的排列是有序的 布局之后窗口的大小发生变化, 控件的大小也会对应变化 如果不对控件布局, 窗口显示出来之后有些控件的看不到的 布局是可以嵌套使用 常用的布局方式 ...
- 【NX二次开发】Block UI 超级点
属性说明 属性 类型 描述 常规 BlockID String 控件ID Enable Logical 是否可操作 Group ...