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​…
不难发现如果当前需要凑cntcntcnt个12k\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×2j−k个12j\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(1−q)(1+fq+2%​)+pq+(1−p)(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][i−radi​+1,i−2]范围的基站都能够接收到第iii个站的perfect signal
仔细想想可知道根据i−radi+1≤i+1−radi+1+1i - rad_i + 1 ≤ i + 1 - rad_{i+1} + 1i−radi​+1≤i+1−radi+1​+1条件,就能使[i−radi+1,i−2][i-rad_i+1,i-2][i−radi​+1,i−2]的基站满足条件。

#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

线段树待补

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

  1. 2018CCPC吉林赛区 hdu6555~hdu6566

    2018CCPC吉林赛区(重现赛)- 感谢北华大学 A 基础数论. #include<bits/stdc++.h> using namespace std;typedef long lon ...

  2. ZOJ 3810 A Volcanic Island (2014年牡丹江赛区网络赛B题)

    ZOJ 3810 A Volcanic Island (2014年牡丹江赛区网络赛B题) 1.题目描写叙述:点击打开链接 2.解题思路:本题是四色定理的模板题.只是有几种情况要提前特判一下:n==1直 ...

  3. ACM-ICPC 2018 南京赛区网络预赛 Lpl and Energy-saving Lamps 线段树

    目录 ACM-ICPC 2018 南京赛区网络预赛 Lpl and Energy-saving Lamps 线段树 题面 题意 思路 ACM-ICPC 2018 南京赛区网络预赛 Lpl and En ...

  4. 小清的线段树25题日志01 线段树下你和我 欢乐多又多

    前言 难度大致会按排序来 就不写总结啦 嘻嘻 适合刚学线段树的人(和我一样 练手 /*if you can't see the repayWhy not just work step by stepr ...

  5. 2018CCPC吉林赛区 | 部分题解 (HDU6555 HDU6556 HDU6559 HDU6561)

    // 杭电上的重现赛:http://acm.hdu.edu.cn/contests/contest_show.php?cid=867 // 杭电6555~6566可交题 A - The Fool 题目 ...

  6. 2018CCPC吉林赛区 The Hermit

    //昨天在杭电上有了重现赛,组队打了一下,这个题没做出来,公式推的过程有点复杂,以后要多做做这种思维题,其实只要推出公式,代码就那么几行,放题~~~ http://acm.hdu.edu.cn/con ...

  7. 2019南昌网络赛-I(单调栈+线段树)

    题目链接:https://nanti.jisuanke.com/t/38228 题意:定义一段区间的值为该区间的和×该区间的最小值,求给定数组的最大的区间值. 思路:比赛时还不会线段树,和队友在这题上 ...

  8. 这是我第一题AC的线段树

    题目简述: 有N个整数,Q次操作,每次操作为询问一个区间[a, b]内数的和(0号操作)或者把一个区间内的数全部加上v(1号操作) 线段树求解即可. #include <cstdio> # ...

  9. UVA 12663 第九届省赛 高桥与低桥 线段树

    题意很简单,n个桥的高度是事先给出来的,然后有m次涨水与落水的高度,问有多少座桥在这m次涨落之后 被淹超过了k次,如果某桥本身被水淹了,此时再涨水,就不能算多淹一次 看下数据10的五次方,10的五次方 ...

最新文章

  1. 【swjtu】数据结构实验3_基于循环队列的排队买票模拟程序
  2. 配置nginx反向代理jira并实现https
  3. JavaScript 方法传参
  4. Android性能优化面试题,与性能优化相关面试题 - 与IPC机制相关面试题 - 《Android面试宝典》 - 书栈网 · BookStack...
  5. 深度学习和目标检测系列教程 8-300:目标检测常见的标注工具LabelImg和将xml文件提取图像信息
  6. nginx配置静态资源访问路径
  7. @MapperScan和@ComponentScan的区别
  8. AcWing 730. 机器人跳跃问题 (二分)
  9. Android 自定义控件圆形图案
  10. Docker入坑指南之EXEC
  11. 字符串格式参数的日期比较函数
  12. Could Not find resource [logback.groovy] ; Cound Not find resource [logback-test.xml]
  13. 在谷歌浏览器上加载翻译软件(金山词霸)
  14. 斯坦福「AI百年研究」首份报告:2030年的人工智能与生活
  15. R语言︱SNA-社会关系网络 R语言实现专题(基础篇)(一)
  16. 【论文笔记】AVA: A Video Dataset of Spatio-temporally Localized Atomic Visual Actions
  17. java 短信验证码(创蓝接口)调用
  18. 敏捷开发创始人_开发人员和技术创始人如何将他们的想法转化为UI设计
  19. 四川大学计算机夏令营总结
  20. 挑战微信王座,王欣、张一鸣、罗永浩今日同日发布社交app

热门文章

  1. php 模板替换,使用PHPWord对Word文件做模板替换
  2. 表格过滤器_记录和管理零散信息,什么软件比 Excel 表格更方便
  3. 微型计算机原理计算两数和,微型计算机原理及汇编语言 第2章-2 补码及加减运算.ppt...
  4. python choice添加下拉框_自定义Django Form中choicefield下拉菜单选取数据库内容实例...
  5. 单片机c语言位运算写法,单片机与嵌入式系统中C语言的位运算小记
  6. [SpringBoot2]web场景_SpringBoot2_SpringMVC自动配置概览
  7. Java StringBuffer 方法
  8. AcWing 730. 机器人跳跃问题
  9. ROADS POJ - 1724(最短路+邻接表+dfs)
  10. JAVA JFrame画图基础和事件监听