前言

比赛链接:

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)\) 求解。

  1. scanf("%d",&q);
  2. while(q--)
  3. {
  4. ans=0;
  5. scanf("%lld",&n);
  6. while(n%5==0) ans+=3,n/=5;
  7. while(n%3==0) ans+=2,n/=3;
  8. while(n%2==0) ans+=1,n/=2;
  9. if(n>1) continue;
  10. else res^=ans;
  11. }
  12. printf("%d",res);

B. Dancer in the Dark

对于 \(40\%\) 的数据,枚举所有情况,时间复杂度约为 \(O(n^m)\)。

对于 \(100\%\) 的数据,我们容易算得答案为 \(m^n-m\times (m-1)^{n-1}\),于是快速幂求解即可,时间复杂度为 \(O(\log n)\)。

  1. 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)\)。

  1. dp[m=1]=a[1];
  2. for(Re int i=2;i<=n;i++)
  3. {
  4. if(dp[m]>a[i]) dp[++m]=a[i];
  5. else dp[lower_bound(dp+1,dp+m+1,a[i],greater<int>())-dp]=a[i];
  6. }
  7. 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)\)。

  1. inline void dfs(int u)
  2. {
  3. for(Re int i=hd[u];i;i=e[i].nxt)
  4. {
  5. int v=e[i].ver,c=e[i].val;
  6. if(cl[v]) continue;
  7. if(c==cl[u]) cl[v]=(cl[u]+1)%n+1;
  8. else cl[v]=c;
  9. dfs(v);
  10. }
  11. }

D. 星とピエロ

对于 \(20\%\) 的数据,考虑枚举第 \(k\) 小的数是哪一个,然后检验用显然的 DP 去做,时间复杂度为 \(O(n^2ms)\)。

对于 \(60\%\) 的数据,考虑在枚举第 \(k\) 小的数的时候二分一下,DP 不变,时间复杂度为 \(O(nms\log n)\)。

对于 \(100\%\) 的数据,考虑记录一个数组 \(nxt[i]\) 表示包含第 \(i\) 个点的线段最右端,然后去进行 DP 就会发现 \(m\) 没用了,时间复杂度为 \(O(ns\log n)\)。

  1. #include<bits/stdc++.h>
  2. #define Re register
  3. using namespace std;
  4. const int N=5005;
  5. int n,m,s,k,a[N],aa[N],ans=-1;
  6. int nxt[N],sum[N],f[N][N];
  7. inline bool check(int mid)
  8. {
  9. memset(f,0,sizeof f);
  10. for(Re int i=1;i<=n;i++)
  11. {
  12. sum[i]=sum[i-1]+(a[i]<=aa[mid]);
  13. }
  14. for(Re int i=1;i<=s;i++)
  15. {
  16. for(Re int j=1;j<=n;j++)
  17. {
  18. f[i][j]=max(f[i][j],f[i-1][j]);
  19. }
  20. for(Re int j=0;j<=n;j++)
  21. {
  22. if(nxt[j])
  23. {
  24. f[i][nxt[j]]=max(f[i][nxt[j]],f[i-1][j-1]+sum[nxt[j]]-sum[j-1]);
  25. }
  26. }
  27. for(Re int j=1;j<=n;j++)
  28. {
  29. f[i][j]=max(f[i][j],f[i][j-1]);
  30. }
  31. }
  32. return f[s][n]>=k;
  33. }
  34. int main()
  35. {
  36. scanf("%d%d%d%d",&n,&m,&s,&k);
  37. for(Re int i=1;i<=n;i++)
  38. {
  39. scanf("%d",&a[i]);
  40. aa[i]=a[i];
  41. }
  42. sort(aa+1,aa+n+1);
  43. for(Re int i=1;i<=m;i++)
  44. {
  45. int l,r;
  46. scanf("%d%d",&l,&r);
  47. for(Re int j=l;j<=r;j++)
  48. {
  49. nxt[j]=max(nxt[j],r);
  50. }
  51. }
  52. int l=1,r=n,mid;
  53. while(l<=r)
  54. {
  55. mid=l+r>>1;
  56. if(!check(mid)) l=mid+1;
  57. else ans=aa[mid],r=mid-1;
  58. }
  59. printf("%d",ans);
  60. return 0;
  61. }

E. うさぎ山から爱をこめて

咕咕咕……

YAOI Round #7 题解的更多相关文章

  1. YAOI Round #5 题解

    前言 比赛链接: Div.1 : http://47.110.12.131:9016/contest/13 Div.2 : http://47.110.12.131:9016/contest/12 D ...

  2. YAOI Round #3 题解

    前言 比赛链接: Div.1 : http://47.110.12.131:9016/contest/7 Div.2 : http://47.110.12.131:9016/contest/8 Div ...

  3. YAOI Round #1 题解

    前言 比赛网址:http://47.110.12.131:9016/contest/3 总体来说,这次比赛是有一定区分度的, \(\text{ACM}\) 赛制也挺有意思的. 题解 A. 云之彼端,约 ...

  4. Codeforces Round #556 题解

    Codeforces Round #556 题解 Div.2 A Stock Arbitraging 傻逼题 Div.2 B Tiling Challenge 傻逼题 Div.1 A Prefix S ...

  5. LibreOJ β Round #2 题解

    LibreOJ β Round #2 题解 模拟只会猜题意 题目: 给定一个长为 \(n\) 的序列,有 \(m\) 次询问,每次问所有长度大于 \(x\) 的区间的元素和的最大值. \(1 \leq ...

  6. Codeforces Round #569 题解

    Codeforces Round #569 题解 CF1179A Valeriy and Deque 有一个双端队列,每次取队首两个值,将较小值移动到队尾,较大值位置不变.多组询问求第\(m\)次操作 ...

  7. Codeforces Round #557 题解【更完了】

    Codeforces Round #557 题解 掉分快乐 CF1161A Hide and Seek Alice和Bob在玩捉♂迷♂藏,有\(n\)个格子,Bob会检查\(k\)次,第\(i\)次检 ...

  8. CFEducational Codeforces Round 66题解报告

    CFEducational Codeforces Round 66题解报告 感觉丧失了唯一一次能在CF上超过wqy的机会QAQ A 不管 B 不能直接累计乘法打\(tag\),要直接跳 C 考虑二分第 ...

  9. Google kickstart 2022 Round A题解

    Speed Typing 题意概述 给出两个字符串I和P,问能否通过删除P中若干个字符得到I?如果能的话,需要删除字符的个数是多少? 数据规模 \[1≤|I|,|P|≤10^5 \] 双指针 设置两个 ...

随机推荐

  1. 出现 关于UTF-8 序列的字节 2 无效的异常

    学习mybatis中碰到了 Caused by: org.apache.ibatis.builder.BuilderException: Error creating document instanc ...

  2. 自然语言推理:微调BERT

    自然语言推理:微调BERT Natural Language Inference: Fine-Tuning BERT SNLI数据集上的自然语言推理任务设计了一个基于注意力的体系结构.现在通过微调BE ...

  3. javaBean命名规范 get / set 后的首字母大写

    javaBean命名规范 Sun 推荐的命名规范 1 ,类名要首字母大写,后面的单词首字母大写 2 ,方法名的第一个单词小写,后面的单词首字母大写 3 ,变量名的第一个单词小写,后面的单词首字母大写 ...

  4. 【NX二次开发】Block UI 组

    设置组及组内成员不可见 this->group->GetProperties()->SetLogical("Show", false); 设置组及组内成员不可操作 ...

  5. Spring Cloud 和 Dubbo,到底用哪个好?

    Spring Cloud是http协议传输,带宽会比较多,同时使用http协议一般会使用JSON报文,消耗会更大 dubbo的开发难度较大,原因是dubbo的jar包依赖问题很多大型工程无法解决 sp ...

  6. 『无为则无心』Python基础 — 6、Python的注释

    目录 1.注释的作用 2.注释的分类 单行注释 多行注释 3.注释的注意事项 4.什么时候需要使用注释 5.总结 提示:完成了前面的准备工作,之后的文章开始介绍Python的基本语法了. Python ...

  7. 重新整理 .net core 实践篇—————领域事件[二十九]

    前文 前面整理了仓储层,工作单元模式,同时简单介绍了一下mediator. 那么就mediator在看下领域事件启到了什么作用吧. 正文 这里先注册一下MediatR服务: // 注册中间者:Medi ...

  8. spring boot @Async异步注解上下文透传

    上一篇文章说到,之前使用了@Async注解,子线程无法获取到上下文信息,导致流量无法打到灰度,然后改成 线程池的方式,每次调用异步调用的时候都手动透传 上下文(硬编码)解决了问题. 后面查阅了资料,找 ...

  9. vue 快速入门 系列 —— vue loader 下

    其他章节请看: vue 快速入门 系列 vue loader 下 CSS Modules CSS Modules 是一个流行的,用于模块化和组合 CSS 的系统.vue-loader 提供了与 CSS ...

  10. 47、django工程(template)

    47.1.django 模板系统介绍: 1.说明: 我们可以直接将 HTML 硬编码到视图的python代码里,尽管这种技术便于解释视图是如何工作的,但却并不是一个好主意. def current_d ...