Educational Codeforces Round 95 (Rated for Div. 2)

昨天本来想打一下,但是今天早上课很早,就没有打,只是看了看前三个题写了个代码,今天中午课结束交了一下都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-drld
考虑需要维护的哪些东西?
首先维护垃圾位置并且每次支持排序只需要用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 bdb的怪物称为大怪物,否则称为小怪物。
不难发现:如果大怪物的个数big<abig<abig<a,那么所有怪物都不会造成伤害,否则才能造成伤害。
小怪物的位置并不会影响大怪物是否造成伤害,不过大怪物的位置会影响小怪物是否造成伤害,因此我们先考虑大怪物的位置。如果一个大怪物想要造成伤害那么它的前面一定有aaa个大怪物,也就是说他只要不是前面aaa个大怪物(炮灰)他就能造成伤害,共有bigbigbig个大怪物那么他不是前aaa个怪物的概率是1−abig1-\frac{a}{big}1biga,现在把所有大怪物排列好,那么一共有big+1big+1big+1个空位可以放置小怪物(由于小怪物直接互不影响,每个位置可以放置随意多个小怪物),小怪物想要造成伤害它的位置一定在前aaa的大怪物后面,易求概率为1−abig+11-\frac{a}{big+1}1big+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;
}

要加油哦~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/319588.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【每日一题】8月4日题目精讲—购物

来源&#xff1a;牛客网&#xff1a; 文章目录购物题目描述题解&#xff1a;代码&#xff1a;购物 时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 32768K&#xff0c;其他语言65536K 64bit IO Format: %lld题目描述 在遥远的东方&#xff0c;有…

P4606-[SDOI2018]战略游戏【圆方树,虚树】

正题 题目链接:https://www.luogu.com.cn/problem/P4606 题目大意 给出nnn个点mmm条边的一张图&#xff0c;qqq次询问给出一个点集&#xff0c;询问有多少个点割掉后可以是点集中至少一个点对不连通。 解题思路 就是问圆方树上的虚树中的圆点数量&#xff0c;照着统计就好了…

【二分】雪(luogu 7405)

正题 luogu 7405 题目大意 坐标轴上有n个雪球&#xff0c;初始重量为0&#xff0c;每一条线段上有重量为1的雪&#xff0c;当雪球经过时&#xff0c;会加上这些雪&#xff0c;而地上就没有雪了 共有m个时刻&#xff0c;每个时刻会使所有雪球向左/右移动wiw_iwi​格&#xff…

Visual Studio 2017 与 Visual Studio for Mac 支持更新

微软在博客中简单介绍了关于 VS 2017 和 VS for Mac 项目的支持计划&#xff1a;https://blogs.msdn.microsoft.com/visualstudio/2018/10/05/visual-studio-2017-and-visual-studio-for-mac-support-updates/。微软表示&#xff0c;在目前努力开发 Visual Studio 2019 的同时&…

牛客练习赛 67——ST表

A.牛牛爱字符串 注意原字符串有空格&#xff0c;不要用cin #define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0) #pragma GCC optimize(2) #include<string> #include<iostream> #include<algorithm> using namespace std; int main() {IO;int …

【每日一题】8月3日题目精讲—小A的最短路

来源&#xff1a;牛客网&#xff1a; 文章目录题目描述题解&#xff1a;代码&#xff1a;时间限制&#xff1a;C/C 3秒&#xff0c;其他语言6秒 空间限制&#xff1a;C/C 262144K&#xff0c;其他语言524288K 64bit IO Format: %lld题目描述 小A这次来到一个景区去旅游&#xf…

Stack(nowcoder 11253-K)

正题 nowcoder 11253-K 题目大意 有n个数&#xff0c;依次加进栈中&#xff0c;每次加入前将栈顶比aia_iai​大的所有元素弹掉&#xff0c;加入后记bib_ibi​为栈的大小 现在给你b中的一些数&#xff0c;让你求a数组的一种合法方案&#xff0c;其中1~n在a中各出现了一次 解题…

P4424-[HNOI/AHOI2018]寻宝游戏【结论】

正题 题目链接:https://www.luogu.com.cn/problem/P4424 题目大意 nnn个mmm位二进制数&#xff0c;开始是一个000。 然后依次对所有二进制数进行nnn次andandand或者ororor操作。 qqq次询问给出二进制数rir_iri​&#xff0c;要求有多少种操作序列使得操作完后的数是rir_iri​…

ASP.NET Core中使用表达式树创建URL

当我们在ASP.NET Core中生成一个action的url会这样写&#xff1a;var url_urlHelper.Action("Index", "Home");这样的写法存在的问题在于我们传递了两个字符串类型的参数&#xff0c;而我们又无法避免对action和controller做重命名操作, 例如将index重命名…

牛客练习赛 66

A.平方数 讨论一下最接近它的两个平方数即可。 #define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0) #pragma GCC optimize(2) #include<cmath> #include<iostream> #include<algorithm> using namespace std; typedef long long ll; int main(…

在你的andorid设备上运行netcore (Linux Deploy)

最近注意到.net core 的新版本已经开始支持ARM 平台的CPU, 特意去Linux Deploy 中尝试了一下&#xff0c;真的可以运行 Welcome to Ubuntu 16.04 LTS (GNU/Linux 4.9.65-perf armv8l)* Documentation: https://help.ubuntu.com/Ubuntu 16.04 LTS [running via Linux Deploy]La…

【每日一题】8月6日题目精讲—追债之旅

来源&#xff1a;牛客网&#xff1a; 时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 65536K&#xff0c;其他语言131072K 64bit IO Format: %lld文章目录题目描述题解&#xff1a;代码&#xff1a;题目描述 小明现在要追讨一笔债务&#xff0c…

【结论】只不过是长的领带(luogu 6877)

正题 luogu 6877 题目大意 给你n1个数aia_iai​和n个数bib_ibi​&#xff0c;cic_ici​为不选aia_iai​时&#xff0c;重新调整剩下n个数的位置后&#xff0c;∑i1nmax(ai−aj)\sum \limits_{i1}^{n}max(a_i-a_j)i1∑n​max(ai​−aj​)的最小值,求c数组 解题思路 不难发现让…

P3273-[SCOI2011]棘手的操作【线段树,并查集】

正题 题目链接:https://www.luogu.com.cn/problem/P3273 题目大意 nnn个点有权值&#xff0c;要求支持操作 连接两个点单点加权联通块加权全图加权单点询问联通块询问最大值全图询问最大值 解题思路 把所有可能产生的联通块都变到一个区间里就好了 考虑怎么排这个东西&…

牛客练习赛 65 (待补E-网络流)

A.最值序列 排序后&#xff0c;前一半加后一半乘即可。 #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 N500010; cons…

持续集成配置之Nuget

Intro本文是基于微软的 VSTS(Visual Studio Team Service) 做实现公众类库的自动打包及发布。之前自己的项目有通过 Github 上的 Travis 和 Appveyor&#xff0c;这次主要是用 VSTS 来做的&#xff0c;对比 appveyor 和 vsts 上的持续集成&#xff0c;vsts 上微软把常用的工具和…

【每日一题】8月7日题目精讲—双栈排序

来源&#xff1a;牛客网 文章目录题目描述题意&#xff1a;题解&#xff1a;代码&#xff1a;时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 131072K&#xff0c;其他语言262144K 64bit IO Format: %lld题目描述 Tom最近在研究一个有趣的排序问…

【期望DP】概率充电器(luogu 4284)

正题 luogu 4284 题目大意 给你棵树&#xff0c;第i个点自己通电的概率是wiw_iwi​&#xff0c;第j条边连接的两个点之间通电的概率是pjp_jpj​&#xff0c;问你通电的点个数的期望值 题目大意 设fif_ifi​为第i个点通电的概率&#xff0c;那么&#xff1a; fisolvej∈link{…

P3760-[TJOI2017]异或和【树状数组】

正题 题目链接:https://www.luogu.com.cn/problem/P3760 题目大意 给出nnn个数字的一个序列aaa&#xff0c;求它所有区间和的异或和 n≤105,∑ai≤106n\leq 10^5,\sum a_i\leq 10^6n≤105,∑ai​≤106 解题思路 开始写了个前缀和FFTFFTFFT发现要卡常然后就换了个方法。 每一…

手把手教你搭APM之Skywalking搭建指南(支持Java/C#/Node.js)

前言什么是APM?全称:Application Performance Management可以参考这里:现代APM体系&#xff0c;基本都是参考Google的Dapper&#xff08;大规模分布式系统的跟踪系统&#xff09;的体系来做的。通过跟踪请求的处理过程&#xff0c;来对应用系统在前后端处理、服务端调用的性能…