2018CCPC吉林赛区(重现赛)补题部分——F线段树待补

A - The Fool

数论分块暴力求和

#define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0)
#pragma GCC optimize(2)
#include<set>
#include<map>
#include<cmath>
#include<queue>
#include<string>
#include<vector>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<unordered_map>
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
const int mod=1e9+7;
int main()
{//IO;int T=1;cin>>T;for(int ca=1;ca<=T;ca++){int n;cin>>n;ll s=0;for(int l=1,r;l<=n;l=r+1){r=n/(n/l);s=(s+1ll*(r-l+1)%2*(n/l))%2;}if(s%2) printf("Case %d: odd\n",ca);else printf("Case %d: even\n",ca);}return 0;
}

B - The World

这题就离谱??? 不明白下面的一二两个设定?很反直觉啊啊啊

  • 12:00 AM 是凌晨十二点
  • 12:00 PM 是中午十二点
  • h=0输出12
#define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0)
#pragma GCC optimize(2)
#include<set>
#include<map>
#include<cmath>
#include<queue>
#include<string>
#include<vector>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<unordered_map>
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
const int mod=1e9+7;
map<string,int> mp;
int main()
{//IO;int T=1;cin>>T;mp["Beijing"] = 8;mp["Washington"] = -5;mp["London"] = 0;mp["Moscow"] = 3;for(int ca=1;ca<=T;ca++){int h,m;string op,from,to;scanf("%d:%d",&h,&m);cin>>op>>from>>to;if(h==12) h=0;if(op=="PM") h+=12;h+=mp[to]-mp[from];int f=0;string now;if(h<0) {f=-1;h+=24;}else if(h>=24){f=1;h-=24;}if(h>=12) {h-=12;now="PM";}elsenow="AM";if(h==0) h+=12;// 输出printf("Case %d: ",ca);if(f==-1) printf("Yesterday %d:%02d ", h, m);else if(f==0)printf("Today %d:%02d ", h, m);else printf("Tomorrow %d:%02d ", h, m);cout<<now<<'\n';}return 0;
}

C - Justice

自己想的辣鸡代码
刚开始没思路于是想猜结论:只要和大于1就一定能够分成两组,因为它是以12k\frac{1}{2^k}2k1为一份,怎么分组就贪心分一下,对于较大的k由于小数太小,没法存储,我当时想的是忽略这些值(k>25的时候小数已经非常小可能对答案没影响),于是写出了下面辣鸡代码wa了

#define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0)
#pragma GCC optimize(2)
#include<set>
#include<map>
#include<cmath>
#include<queue>
#include<string>
#include<vector>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<unordered_map>
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
const int mod=1e9+7;
const double eps=1e-14;
const int N=100010;
double two[110];
int ans[N];
int n;
struct node
{int k,id;bool operator<(const node& o) const {return k<o.k;}
}q[N];
int main()
{//IO;int T=1;cin>>T;two[0]=1.0;for(int i=1;i<=100;i++) two[i]=two[i-1]/2.0;for(int ca=1;ca<=T;ca++){cin>>n;for(int i=1;i<=n;i++){cin>>q[i].k;q[i].id=i;}sort(q+1,q+1+n);double s=0.0;for(int i=1;i<=n;i++){if(q[i].k>=100) {ans[q[i].id]=1;continue;}if(s+eps>0.5) ans[q[i].id]=1;elseans[q[i].id]=0;s+=two[q[i].k];}if(s+eps>1.0) {printf("Case %d: YES\n",ca);for(int i=1;i<=n;i++)  cout<<ans[i];cout<<'\n';}elseprintf("Case %d: NO\n",ca);}return 0;
}

正解
我们需要凑一个12\frac1221,或者2个14\frac1441,或者4个18…\frac18\dots81
不难发现如果当前需要凑cntcntcnt12k\frac1{2^k}2k1,那么如果现在没有12k\frac1{2^k}2k1,我们不得不用12j(j>k)\frac1{2^j}(j>k)2j1(j>k)来凑,不难发现我们现在需要凑cnt×2j−kcnt×2^{j-k}cnt×2jk12j\frac1{2^j}2j1

#define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0)
#pragma GCC optimize(2)
#include<set>
#include<map>
#include<cmath>
#include<queue>
#include<string>
#include<vector>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<unordered_map>
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
const int N=100010;
struct node
{int k,id;bool operator<(const node&o) const {return k<o.k;}
}q[N];
int ans[N];
int n;
int main()
{//IO;int T=1;cin>>T;for(int ca=1;ca<=T;ca++){cin>>n;for(int i=1;i<=n;i++){ans[i]=0;cin>>q[i].k;q[i].id=i;}sort(q+1,q+1+n);bool ok=0;int pre=1;int cnt1=1,cnt2=1;for(int i=1;i<=n;i++){while(cnt1+cnt2<=n-i+1&&pre<q[i].k)//少个+1都会wa 感觉数据有点诡异啊{cnt1*=2;cnt2*=2;pre++;}if(cnt1+cnt2>n-i+1) break;if(cnt1>0){cnt1--;ans[q[i].id]=1;}elsecnt2--;   if(cnt1<=0&&cnt2<=0) {ok=1;break;}}if(!ok) printf("Case %d: NO\n",ca);else{printf("Case %d: YES\n",ca);for(int i=1;i<=n;i++) cout<<ans[i];cout<<'\n';}}return 0;
}

D - The Moon

一看就是个概率dp的题,由于自己概率dp的题写的太少了,然后就写不出来,看的题解。

fif_ifi是当q=iq=iq=i是的期望次数
fi=p(1−q)(1+fq+2%)+pq+(1−p)(1+fq+1.5%)f_i=p(1-q)(1+f_{q+2\%})+pq+(1-p)(1+f_{q+1.5\%})fi=p(1q)(1+fq+2%)+pq+(1p)(1+fq+1.5%)
记忆化搜索即可

#define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0)
#pragma GCC optimize(2)
#include<set>
#include<map>
#include<cmath>
#include<queue>
#include<string>
#include<vector>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<unordered_map>
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
const int mod=1e9+7;
const int N=1010;
double f[N];
int p;
double dfs(int q)
{if(f[q]>=0) return f[q];if(q>=1000)return f[q]=100.0/(1.0*p);f[q]=(1.0*p/100.0)*(1.0-1.0*q/1000.0)*dfs(min(1000,q+20))+(1.0-1.0*p/100.0)*dfs(min(1000,q+15))+1.0;return f[q];
}
int main()
{//IO;int T=1;cin>>T;for(int ca=1;ca<=T;ca++){for(int i=0;i<=1000;i++) f[i]=-1;;cin>>p;printf("Case %d: %.6lf\n",ca,dfs(20));}return 0;
}

F - The Hermit

这题非常巧妙啊
结论:对于第iii个站[i−radi+1,i−2][i-rad_i+1,i-2][iradi+1,i2]范围的基站都能够接收到第iii个站的perfect signal
仔细想想可知道根据i−radi+1≤i+1−radi+1+1i - rad_i + 1 ≤ i + 1 - rad_{i+1} + 1iradi+1i+1radi+1+1条件,就能使[i−radi+1,i−2][i-rad_i+1,i-2][iradi+1,i2]的基站满足条件。

#define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0)
#pragma GCC optimize(2)
#include<set>
#include<map>
#include<cmath>
#include<queue>
#include<string>
#include<vector>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<unordered_map>
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
const int mod=1e9+7;
const int N=100010;
int main()
{//IO;int T=1;cin>>T;for(int ca=1;ca<=T;ca++){int n;cin>>n;int res=0;for(int i=1;i<=n;i++){int a;cin>>a;res^=max(0,a-2);}printf("Case %d: %d\n", ca, res);}return 0;
}

I - Strength

贪心+模拟,1发A有点高兴。
先判断是否能够打死完对面的怪物,如果能够打完那么先用最小的代价把防御类型的干掉(只需找一个大于防御值的最小的攻击即可)
如果不能打死完,那么我们只需要用最大的攻击最小的即可,欺负弱小

#define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0)
#pragma GCC optimize(2)
#include<set>
#include<map>
#include<cmath>
#include<queue>
#include<string>
#include<vector>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<unordered_map>
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
const int mod=1e9+7;
const int N=100010;
int n,m;
int a[N];
int b[N];
bool st1[N],st2[N];
int main()
{//IO;int T=1;cin>>T;for(int ca=1;ca<=T;ca++){memset(st1,0,sizeof st1);memset(st2,0,sizeof st2);vector<int> ak,df;cin>>n>>m;for(int i=1;i<=n;i++) cin>>a[i];sort(a+1,a+1+n);for(int i=1;i<=m;i++) cin>>b[i];for(int i=1;i<=m;i++){int op;cin>>op;if(op) df.push_back(b[i]);else ak.push_back(b[i]);}sort(df.begin(),df.end());sort(ak.begin(),ak.end());int cnt=0;int j=1;for(auto t:df){while(j<=n&&a[j]<t) j++;if(a[j]>=t) {st1[j]=1;cnt++;j++;}else break;}int res1=0,res2=0;if(cnt==df.size()){int cnt=0,j=1;for(auto t:ak){while(j<=n&&!st1[j]&&a[j]<t) j++;if(a[j]>=t){res1+=a[j]-t;j++;st2[j]=1;cnt++;}else break;}if(cnt==ak.size()){for(int i=1;i<=n;i++)if(!st1[i]&&!st2[i]) res1+=a[i];}else{res1=0;int j=n;for(auto t:ak){if(!st1[j]&&a[j]>=t) {res2+=a[j]-t;j--;}else break;}}}else{int j=n;for(auto t:ak){if(a[j]>=t) {res2+=a[j]-t;j--;}else break;}}printf("Case %d: %d\n", ca, max(res1, res2));}return 0;
}

F - Lovers

线段树待补

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

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

相关文章

【dfs】年会小游戏

题目大意 给出n&#xff0c;问小于n的数中&#xff0c;因数最多的数 解题思路 要满足因数最多&#xff0c;则小的质因数个数要大于等于打的质因数个数 那么直接按这个需求dfs枚举每个质因数的指数 code #include<cstdio> #include<cstring> #include<iostre…

在 ASP.NET Core 中集成 Skywalking APM

前言大家好&#xff0c;今天给大家介绍一下如何在 ASP.NET Core 项目中集成 Skywalking&#xff0c;Skywalking 是 Apache 基金会下面的一个开源 APM 项目&#xff0c;有些同学可能会 APM 是干什么用的还不是太了解&#xff0c;那么下面我就简单的来说一下。APM 全称是 &#x…

YbtOJ-大收藏家【分层图,最大流】

正题 题目链接:https://www.ybtoj.com.cn/contest/117/problem/2 题目大意 nnn个人&#xff0c;每人有aia_iai​个属于自己的物品。mmm次交换依次进行&#xff0c;每次xi,yix_i,y_ixi​,yi​两个人可以决定拿不拿自己的一个物品进行交换。 求111号人最后能拿到最多多少种物品…

2019中国大学生程序设计竞赛(CCPC) - 网络选拔赛 Fishing Master

文章目录题意&#xff1a;题解&#xff1a;代码&#xff1a;题意&#xff1a; 你在钓鱼&#xff0c;每次钓鱼固定时间为k&#xff08;必定钓上一条鱼&#xff09;&#xff0c;池塘一共n条鱼&#xff0c;钓上鱼后要煮&#xff0c;每条鱼煮的时间不相同&#xff0c;可以在煮鱼的…

NWERC 2018——B.Brexit Negotiations

Brexit Negotiations 有向无环图&#xff0c;很容易想到拓扑排序&#xff0c;很明显我们需要把权值大的点放在最前面&#xff0c;然后就想到搞个优先队列&#xff0c;每次拓扑排序的时候出权值大的点&#xff0c;但是发现答案是不对的。 正向建图拓扑排序能够保证小的点一定最后…

.NET运行时中的监测和可观测性

今年5月份的时候研究分布式追踪的问题知道了的拦截方式比较零散&#xff0c; 刚好8月份的时候看到这篇文章&#xff0c;这个文章总结的比较完整。存档了很久&#xff0c;趁今天有空翻译给大家。原文地址&#xff0c;校验&#xff1a;张蘅水.NET是一个托管运行时&#xff0c;这意…

YbtOJ#532-往事之树【广义SAM,线段树合并】

正题 题目链接:https://www.ybtoj.com.cn/problem/532 题目大意 给出nnn个点的一个TrieTrieTrie树&#xff0c;定义SxS_xSx​表示节点xxx代表的字符串 求max{∣LCP(Sx,Sy)∣∣LCS(Sx,Sy)∣}(x≠y)max\{|LCP(S_x,S_y)||LCS(S_x,S_y)|\}(x\neq y)max{∣LCP(Sx​,Sy​)∣∣LCS(S…

【并查集】公司搬迁

题目大意 给出n,a,b和n个数&#xff0c;有两个集合A,B&#xff0c;如果x放在A中则a-x必须存在且在A中&#xff0c;B同理&#xff0c;问你是否有合法方案 解题思路 不难发现&#xff0c;如果a-x或b-x存在&#xff0c;那么和x必须在同一个集合&#xff08;若x放A中b-x放B中则不…

牛客练习赛 71 AC

A - 回文数 回文数条件&#xff1a;奇数个数的个数最多有一个 如果0的数量是0&#xff0c;那么直接先找到奇数个数的数是谁&#xff0c;然后正序输出一半逆序输出一半即可。 如果0的数量不是0&#xff0c;只需要找到一个偶数个个数的数放置第一个即可&#xff08;只需要放一个…

开源文件服务器file-service介绍

File-service一个基于ASP.NET Core的可伸缩、通用的文件服务器。通常后端项目可能会有头像、图片、音频、视频等上传/下载需求&#xff0c;这些需求都可以抽象为文件服务。功能特点支持Linux&#xff08;推荐&#xff09;、Windows可伸缩式架构&#xff0c;支持部署1-N台文件服…

【二分】走亲戚

题目大意 平面上有n个点&#xff0c;给出m个询问&#xff0c;每个询问要回答从x轮流往右往左去到最远的点&#xff0c;最后到达的点 解题思路 对于每个询问&#xff0c;每次二分左右可以到多远&#xff0c;直到不能动为止 考虑时间&#xff0c;对于重复走一个范围的&#xf…

CF1375F-Integer Game【交互】

正题 题目链接:https://www.luogu.com.cn/problem/CF1375F 题目大意 给出a,b,ca,b,ca,b,c。先手每次指定一个数kkk&#xff0c;然后后手指定一个数字加上kkk&#xff0c;若有相同的数则先手胜利&#xff0c;操作次数超过100010001000后后手胜。后手不能两次操作同一个数。 你…

Stars(树状数组)

题意&#xff1a; m个星星&#xff0c;一个星星的等级取决于有多少其他星星的横纵坐标不大于它&#xff0c;如果有x个&#xff0c;该星星等级为x 问各个等级的星星有多少个&#xff1f; &#xff08;题目会按照y的升序给出星星坐标&#xff09; 题解&#xff1a; 树状数组入…

AtCoder Regular Contest 105 部分 NIM游戏

TESyyds&#xff0c;本来以为又要3:1&#xff0c;结果创造历史&#xff01;&#xff01;&#xff01;非常激动啊好久好久没看过让二追三了。 无缝衔接回旋踢&#xff0c;qa插眼we。送给雷达哥 A - Fourtune Cookies 签到题 #define IO ios::sync_with_stdio(false);cin.tie(…

【状压DP】作业

题目大意 有n个数&#xff0c;让你对其排列&#xff0c;令排列后的第i个数字为sis_isi​&#xff0c;该排列要满足&#xff1a; ∀i∈[1,n),si≤si1\forall i\in [1,n),s_i\leq s_{i1}∀i∈[1,n),si​≤si1​∀i∈[1,n),∣(min(si,si1),max(si,si1))∩{sj∣k>i}∣≤bi\fora…

Lost Cows(树状数组)

试题链接 题意&#xff1a; 求出一个&#xff11;到&#xff4e;的排列&#xff0c;这个排列只告诉了你从第二个数字开始的比这个数字小的数的个数。 题解&#xff1a; 如果一个数p&#xff0c;p的前面有m个比他小的数&#xff0c;后面有n个比他小的数&#xff0c;那p的位置…

P2611-[ZJOI2012]小蓝的好友【Treap,扫描线】

正题 题目链接:https://www.luogu.com.cn/problem/P2611 题目大意 r∗cr*cr∗c的网格上有nnn个标记点&#xff0c;然后求有多少个矩形包含至少一个标记点。 1≤r,c≤4104,1≤n≤1051\leq r,c\leq 4\times 10^4,1\leq n\leq 10^51≤r,c≤4104,1≤n≤105 保证数据随机 解题思路…

上学要迟到了【最短路转化】

上学要迟到了 题目 牛牛早上起床一看&#xff0c;自己睡过了&#xff0c;赶紧起床准备去学校&#xff0c;他去学校只有两种方式&#xff0c;坐公交车和步行&#xff0c;牛牛去学校是一条直线&#xff0c;这条直线上总共有 nnn 个车站&#xff0c;车站之间的距离都是相等的&am…

Microsoft Tech Summit 2018 课程简述:利用 Windows 新特性开发出更好的手绘视频应用...

概述Microsoft Tech Summit 2018 微软技术暨生态大会将于10月24日至27日在上海世博中心举行&#xff0c;这也会是国内举办的最后一届 Tech Summit&#xff0c;2019 年开始会以 Microsoft Ignite Tour 的形式出现&#xff0c;大家可以在官网查看本次会议信息&#xff1a;https:/…