
纪中2020.4.8普及C组模拟赛总结
发布日期:2021-05-07 13:07:34
浏览次数:11
分类:原创文章
本文共 2663 字,大约阅读时间需要 8 分钟。
加油!!!
T1
此题太细节了,虽然我想了2小时
但考试时还是很多地方没想到
所以只得了 26.7 p t s 26.7pts 26.7pts
其实我们只需要用数学思维总结出四条通用规律,就能避免一堆的特判了!
- 把2个1放在两个不同的区间
- 把2个1放在同一个区间
- 把2个1分别放在头和尾
- 之间输出
A C C o d e AC~Code AC Code
#include<algorithm>#include<iostream>#include<cstring>#include<cstdio>#include<cmath>using namespace std;int n,m,maxn1,maxn2,x,y,zhz=2147483647;int a[100100],js;char c;int main(){ freopen("socdist.in","r",stdin); freopen("socdist.out","w",stdout); cin>>n; for(int i=1; i<=n; i++) { cin>>c; if(c=='1') { m++,a[m]=i; if(m>1) { zhz=min(zhz,a[m]-a[m-1]); if(a[m]-a[m-1]>=maxn1) { maxn2=maxn1; maxn1=a[m]-a[m-1]; } else maxn2=max(maxn2,a[m]-a[m-1]); } } } x=min(maxn1/2,maxn2/2),y=maxn1/3; //不同情况不同做法 if(a[1]>1) { x=max(x,min(a[1]-1,maxn1/2)); y=max(y,(a[1]-1)/2); } if(a[m]<n) { x=max(x,min(n-a[m],maxn1/2)); y=max(y,(n-a[m])/2); } if(a[1]>1&&a[m]<n) js=min(a[1]-1,n-a[m]); if(m==0) cout<<n-1; else cout<<min(zhz,max(x,max(y,js))); return 0;}
T2
本题我没有很仔细地想
但其实 O ( n ) O(n) O(n)扫一遍就可以过
先把没感染的牛存下来,然后枚举他们, l l l和 r r r从枚举的位置开始向两边扩展,直到遇到一个被感染的牛,
r = m i n ( r , m i n ( 当 前 牛 的 位 置 − l , r − 当 前 牛 的 位 置 ) r=min(r,min(当前牛的位置−l,r−当前牛的位置) r=min(r,min(当前牛的位置−l,r−当前牛的位置)
算出 r r r后我们枚举每一个点(利用分块思想),
最后输出ans就行了
#include<algorithm>#include<iostream>#include<cstring>#include<cstdio>#include<cmath>using namespace std;int maxn,minn=2147483647,tj=2147483647;int n,x,y,r,l,pd,j,ans;int a[1000010],b[1010];int main(){ freopen("socdist2.in","r",stdin); freopen("socdist2.out","w",stdout); cin>>n; for(int i=1; i<=n; i++) { scanf("%d%d",&x,&y); if(y==1) a[x]=2; if(y==0) { a[x]=1; b[++j]=x; } maxn=max(maxn,x); minn=min(minn,x); } sort(b+1,b+1+j); for(int i=1; i<=j; i++) { l=b[i],r=b[i]; while(a[l]!=2) //分别向两边枚举,遇到被感染的牛才停下 { l--; if(l<minn) { l=-2147483647; break; } } while(a[r]!=2) { r++; if(r>maxn) { r=2147483647; break; } } tj=min(tj,min(b[i]-l,r-b[i])); //求 R } tj--; for(int i=minn; i<=maxn; i++) //分块思想求开始传播之前已经得病的奶牛的最小数量 { if(a[i]==2) { if(pd<=0) ans++; //一块结束后就答案++ pd=tj; } else pd--; } cout<<ans; return 0;}
T3
考试时题目看的一头雾水
就放弃了,听了讲解后也不是很明白
还是等讲解回放吧!‘
A C C o d e AC~Code AC Code
这题要放到明天做
总分
26.7 + 10 + 0 = 36.7 p t s 26.7+10+0=36.7pts 26.7+10+0=36.7pts
总结
- 不能懒,题目一定要钻研
- 不要轻易放弃一道题
发表评论
最新留言
网站不错 人气很旺了 加油
[***.192.178.218]2025年03月27日 11时16分54秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
(Python学习笔记):条件语句
2019-03-04
(Python学习笔记):字典
2019-03-04
(C++11/14/17学习笔记):并发基本概念及实现,进程、线程基本概念
2019-03-04
(C++11/14/17学习笔记):线程启动、结束,创建线程多法、join,detach
2019-03-04
(C++11/14/17学习笔记):创建多个线程、数据共享问题分析及案例
2019-03-04
(QT学习笔记):按钮组中的常用控件
2019-03-04
(音视频学习笔记):SDL-YUV显示-播放音频PCM
2019-03-04
leetcode 14 最长公共前缀
2019-03-04
做做Java
2019-03-04
攻防世界新手区pwn
2019-03-04
2020-2021新技术讲座课程
2019-03-04
Linux服务器搭建常见开发环境
2019-03-04
GIT简介
2019-03-04
eclipse github团队成员修改工程后push推送
2019-03-04
Mybatis-Plus之@TableField字段
2019-03-04
shell中的数学运算
2019-03-04
shell 数学运算
2019-03-04
如何使用4G模块通过MQTT协议传输温湿度数据到onenet
2019-03-04
图解:网络硬件的发展史
2019-03-04
vue项目配置文件vue.config.js中devServer.proxy 使用说明
2019-03-04