昨天本来想打一下,但是今天早上课很早,就没有打,只是看了看前三个题写了个代码,今天中午课结束交了一下都AC了。y1s1 A题第一次写就出来了,但是答案一直不对,最后结果是样例错了-。-

A - Buying Torches

数学题,最终需要stick的数量是ky+kky+kky+k,然后直接求答案就行了。

#define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0)
#pragma GCC optimize(2)
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long ll;
const int N=100010;
int main()
{IO;int T=1;cin>>T;while(T--){ll x,y,k;cin>>x>>y>>k;ll res=k+(1ll*k*y+k-1+x-2)/(x-1);cout<<res<<endl;}return 0;
}

B - Negative Prefixes

对于不固定位置的数,前面越大越好。把不固定位置的数逆序排列,然后插入原数组即可。

#define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0)
#pragma GCC optimize(2)
#include<vector>
#include<iostream>
#include<algorithm>
using namespace std;
const int N=100010;
int a[N],n;
bool st[N];
int main()
{IO;int T=1;cin>>T;while(T--){cin>>n;for(int i=1;i<=n;i++) cin>>a[i];vector<int> b;for(int i=1;i<=n;i++){st[i]=0;cin>>st[i];if(!st[i]) b.push_back(a[i]);}sort(b.begin(),b.end());reverse(b.begin(),b.end());for(int i=1,j=0;i<=n;i++){if(st[i]) cout<<a[i]<<' ';else cout<<b[j++]<<' ';}cout<<'\n';}return 0;
}

C - Mortal Kombat Tower

写个dp考虑转移即可。
f[i][1/2][0/1]f[i][1/2][0/1]f[i][1/2][0/1]表示为考虑前iii个boss,最后一次kill杀了1/2个boss,现在是轮到谁了(0表示朋友,1表示自己)。
转移就很容易,边界是f[0][1/2][1]=0f[0][1/2][1]=0f[0][1/2][1]=0由于朋友先手,最开始只能从前面的边界进行转移。

#define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0)
#pragma GCC optimize(2)
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long ll;
typedef pair<ll,ll> pll;
typedef pair<int,int> pii;
const int N=200010;
int a[N],n;
int f[N][3][2];
int main()
{IO;int T=1;cin>>T;while(T--){cin>>n;for(int i=1;i<=n;i++){cin>>a[i];for(int j=1;j<=2;j++)for(int k=0;k<=1;k++)   f[i][j][k]=0x3f3f3f3f;}// f[0][1][1]=f[0][2][1]=0; 全局变量 省略这一步f[0][2][0]=f[0][1][0]=0x3f3f3f3f;for(int i=1;i<=n;i++){f[i][1][0]=min(f[i-1][1][1],f[i-1][2][1])+a[i];if(i>=2) f[i][2][0]=min(f[i-2][1][1],f[i-2][2][1])+a[i]+a[i-1];f[i][1][1]=min(f[i-1][1][0],f[i-1][2][0]);if(i>=2) f[i][2][1]=min(f[i-2][1][0],f[i-2][2][0]);}int res=0x3f3f3f3f;for(int i=1;i<=2;i++)for(int j=0;j<=1;j++)res=min(res,f[n][i][j]);cout<<res<<'\n';}return 0;
}

D - Trash Problem

贪心:我们只要把所有坐标先排序,然后只找出两个相距最远的两堆垃圾,然后分别向左和向右知道最左端和最右端所移动的步数就是答案。
比如排序后最左端的垃圾左边是lll,最右端是rrr,这些垃圾中u,vu,vu,v相距最远距离是ddd,那么答案就是r−l−dr-l-dr−l−d
考虑需要维护的哪些东西?
首先维护垃圾位置并且每次支持排序只需要用set维护即可
齐次需要维护每对垃圾之间的距离,由于可能出现重复序列我们用multiset维护即可。
每次某位置加入一个垃圾或者删除某位置的垃圾就维护一下setmultiset即可。

关于multisetms.erase(x)
如果xxx是值,那么它将删除所有val=xval=xval=x,如果xxx是地址,将删除该地址的数,因此如果想要只删除一个val=xval=xval=x的数,需要先找到地址,然后按照地址删除。

//O((n+q)logn)
#define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0)
#pragma GCC optimize(2)
#include<set>
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long ll;
typedef pair<ll,ll> pll;
typedef pair<int,int> pii;
const int N=100010;
set<int> s;
multiset<int,greater<int>> ms;
int n,q;
int a[N];
int main()
{IO;int T=1;//cin>>T;while(T--){cin>>n>>q;for(int i=1;i<=n;i++) {cin>>a[i];s.insert(a[i]);}sort(a+1,a+1+n);ms.insert(0);for(int i=2;i<=n;i++) ms.insert(a[i]-a[i-1]);for(int i=0;i<=q;i++){if(s.size()<=2) cout<<"0\n";else{auto ed=s.end();ed--;int l=*s.begin(),r=*ed;cout<<r-l-*ms.begin()<<'\n';}if(i!=q){int op,x;cin>>op>>x;if(op==1){s.insert(x);if(s.size()==1) continue;auto ed=s.end();ed--;auto t=s.find(x);if(t==ed){t--;ms.insert(x-*t);}else if(t==s.begin()){t++;ms.insert(*t-x);}else{auto t1=t,t2=t;t1--;t2++;ms.insert(*t2-x);ms.insert(x-*t1);auto p=ms.find(*t2-*t1);ms.erase(p);}}else{if(s.size()==1){s.erase(x);continue;}auto t=s.find(x);auto ed=s.end();ed--;if(t==ed){t--;auto p=ms.find(x-*t);ms.erase(p);}else if(t==s.begin()){t++;auto p=ms.find(*t-x);ms.erase(p);}else{auto t1=t,t2=t;t1--;t2++;ms.insert(*t2-*t1);auto p1=ms.find(x-*t1);ms.erase(p1);auto p2=ms.find(*t2-x);ms.erase(p2);}s.erase(x);}}}}return 0;
}

由于自己对STL不是太熟悉,踩了非常多的坑www
一位网友的set总结

剩下的题以后再看吧?可能?

E - Expected Damage

首先我们让d≥bd \ge bd≥b的怪物称为大怪物,否则称为小怪物。
不难发现:如果大怪物的个数big<abig<abig<a,那么所有怪物都不会造成伤害,否则才能造成伤害。
小怪物的位置并不会影响大怪物是否造成伤害,不过大怪物的位置会影响小怪物是否造成伤害,因此我们先考虑大怪物的位置。如果一个大怪物想要造成伤害那么它的前面一定有aaa个大怪物,也就是说他只要不是前面aaa个大怪物(炮灰)他就能造成伤害,共有bigbigbig个大怪物那么他不是前aaa个怪物的概率是1−abig1-\frac{a}{big}1−biga​,现在把所有大怪物排列好,那么一共有big+1big+1big+1个空位可以放置小怪物(由于小怪物直接互不影响,每个位置可以放置随意多个小怪物),小怪物想要造成伤害它的位置一定在前aaa的大怪物后面,易求概率为1−abig+11-\frac{a}{big+1}1−big+1a​,由此预处理前缀和,然后快速幂逆元即可得到答案。

#define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0)
#pragma GCC optimize(2)
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long ll;
const int N=200010,mod=998244353;
int d[N],s[N];
int n,m;
int qmi(int a,int b,int p)
{int res=1;while(b){if(b&1) res=1ll*res*a%p;a=1ll*a*a%p;b>>=1;}return res;
}
int main()
{IO;int T=1;//cin>>T;while(T--){cin>>n>>m;for(int i=1;i<=n;i++) cin>>d[i];sort(d+1,d+1+n);for(int i=1;i<=n;i++) s[i]=(s[i-1]+d[i]%mod)%mod;while(m--){int a,b;cin>>a>>b;int pos=lower_bound(d+1,d+1+n,b)-d;int small=pos-1,big=n-pos+1;int res;if(big<a) res=0;elseres=(1ll*(big+1-a)*qmi(big+1,mod-2,mod)%mod*s[small]%mod+1ll*(big-a)*qmi(big,mod-2,mod)%mod*(s[n]-s[small]+mod)%mod)%mod;cout<<res<<'\n';}}return 0;
}

要加油哦~

Educational Codeforces Round 95 (Rated for Div. 2)相关推荐

  1. Educational Codeforces Round 95 (Rated for Div. 2)D. Trash Problem(权值线段树+离散化)

    题目描述 Vova decided to clean his room. The room can be represented as the coordinate axis OX. There ar ...

  2. Educational Codeforces Round 90 (Rated for Div. 2)(A, B, C, D, E)

    Educational Codeforces Round 90 (Rated for Div. 2) Donut Shops 思路 分三种情况: a==c/ba == c / ba==c/b这个时候两 ...

  3. Educational Codeforces Round 114 (Rated for Div. 2) (A ~ F)全题解

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Educational Codeforces Round 114 (Rated for Div. 2) ...

  4. Educational Codeforces Round 106 (Rated for Div. 2)(A ~ E)题解(每日训练 Day.16 )

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 目录 Educational Codeforces Round 106 (Rated for Div. ...

  5. Educational Codeforces Round 37 (Rated for Div. 2) 1

    Educational Codeforces Round 37 (Rated for Div. 2) A.Water The Garden 题意:Max想给花园浇水.花园可被视为长度为n的花园床,花园 ...

  6. Educational Codeforces Round 89 (Rated for Div. 2)(A, B, C, D)

    Educational Codeforces Round 89 (Rated for Div. 2) A. Shovels and Swords 思路 题意非常简单,就是得到最多的物品嘛,我们假定a, ...

  7. Educational Codeforces Round 114 (Rated for Div. 2) D. The Strongest Build 暴力 + bfs

    传送门 文章目录 题意: 思路: 题意: 你有nnn个装备槽,每个槽里面有cic_ici​个力量加成,对于每个槽只能选一个力量加成,现在给你mmm个力量组合[b1,b2,...,bn][b_1,b_2 ...

  8. Educational Codeforces Round 72 (Rated for Div. 2) D. Coloring Edges dfs树/拓扑找环

    传送门 文章目录 题意: 思路: 题意: 给你一张图,你需要给这个图的边染色,保证如果有环那么这个环内边的颜色不全相同,输出染色方案和用的颜色个数. n,m≤5e3n,m\le5e3n,m≤5e3 思 ...

  9. Educational Codeforces Round 111 (Rated for Div. 2) D. Excellent Arrays 组合数学

    传送门 文章目录 题意: 思路: 题意: 给你一个数组aia_iai​,定义一个数组是好的当且仅当对于所有iii都有ai!=ia_i!=iai​!=i.定义f(a)f(a)f(a)表示数组aaa中i& ...

最新文章

  1. windows10 自动开机、关机
  2. UVA 1515 - Pool construction(最小割)
  3. 工业计算机是服务器吗,工控机服务器能通用吗_服务器和工控机有什么区别
  4. np.random.randint产生一个范围内的数据
  5. Android SlidingMenu 仿网易新闻客户端布局
  6. IEDevToolBar - 一个分析网页的有用的工具
  7. 编织让你受益一生的交际网
  8. javascript如何用户的判断操作系统
  9. TensorFlow入门(2)矩阵基础
  10. MySQL 5.7: Page Cleaner的刷脏问题
  11. 小米球ngrok如何后台启动
  12. bochs的安装和配置
  13. 计算机打不开管理reg,“.reg”代码解决Win7系统自带磁盘管理打不开的故障
  14. 华为云挂载磁盘及初始化数据盘(Linux)
  15. windows server添加角色
  16. 企业微信发送信息异常的临时处理方案
  17. jquery closest()的用法
  18. python埃及分数_送你一份低折扣书单,Python就占了6本,人工智能2本
  19. prusai3打印机使用教程_打印虎原创RepRapPrusai33D打印机校准图解教程系列之二.pdf...
  20. seq2seq(序列到序列)模型

热门文章

  1. 帆软获取上月的第一天与最后一天_《原神》岩港打工第一天怎么玩 岩港打工第一天玩法攻略...
  2. cheatengine找不到数值_彩票中奖500万,领了还不到一半?这些问题不解决,钱都拿不走...
  3. 7-2 银行家算法--申请资源 (30 分)
  4. C++实现dijkstra单源最短路径
  5. [JavaWeb-CSS]CSS扩展选择器
  6. SpringBoot项目新手——问题疑惑及解决笔记
  7. 如何把自己的经历写成小说_古天乐的经历教会我们:如何在被欺骗以后改善自己的心理状态...
  8. 数据结构与算法--查找与排序另类用法-旋转数组中的最小数字
  9. MarkDown的介绍
  10. CoreJava 笔记总结-第十二章 并发-1