2021.9.29 晚


489/C. Given Length and Sum of Digits…

大意:

给出n和m,构造长度为n,每个数位之和为m的数字。输出能够构造出的最大值和最小值。不能有前导0。
如果不能构造出,输出-1 -1。

思考:

构造最大值,肯定是让最大的放前面,所以从前往后的每一位都放能放下的最大值,后面剩下都是0。
构造最小值,就反过来,让最大的放最后面。但是前面不能有前导0,所以如果排不到第一位的话,从下一位置调个1过来。
注意特判长度为0和数位之和为0的情况。

Code:

const int N = 200010;
int T, n, m, a[N];int main(){cin>>n>>m;if(m==0){if(n==1) cout<<"0 0";else cout<<"-1 -1";return 0;} int t=m,f;for(int i=n;i>=1;i--){if(m>=9) a[i]=9,m-=9,f=i;else if(m) a[i]=m,m=0,f=i;}if(m){cout<<"-1 -1";return 0;}if(!a[1]) a[1]=1,a[f]--;for(int i=1;i<=n;i++) cout<<a[i];cout<<"\n";m=t;for(int i=1;i<=n;i++){if(m>=9) a[i]=9,m-=9;else if(m) a[i]=m,m=0;else a[i]=0;}if(m){cout<<"-1 -1";return 0;}for(int i=1;i<=n;i++) cout<<a[i];return 0;
}

520/B. Two Buttons

大意:

给出一个数 n ,执行两种操作使之变成 m:
1. n ∗ 2 1.n*2 1.n∗2
2. n − 1. 2. n-1. 2.n−1.

思考:

两种思路:

1. b f s 1.bfs 1.bfs

和 奇怪的电梯 这题类似。

每次取队头元素,执行两种操作,再分别放入队列中。
第一次到达目标值,便是最小的操作次数。

有个需要注意的地方:可能会无限次的2,导致无解。所以如果当前值2之后,比答案*2大了,那肯定没有必要再乘了,就不往下走。就像一个剪枝一样。
还可以加上 ‘-1最多减到0’ 这个限制。

Code:
const int N = 200010;
int T, n, m, a[N];// 思路1:bfs
int main(){cin>>n>>m;queue<PII> que;que.push({n,0});int cnt=0;while(que.size()){ int x=que.front().fi,t=que.front().se;que.pop();if(x==m){cout<<t;break;}if(x*2<=m*2&&!f[x*2]){que.push({x*2,t+1});f[x*2]=1;}if(!f[x-1]){que.push({x-1,t+1});f[x-1]=1;}}return 0;
}
2. 贪 心 2.贪心 2.贪心

正着从n经过乘2和-1操作得到m不好求,我们反过来从m经过除2和+1操作得到n

  • 如果当前数n是奇数,不能除2,执行+1操作,先将n+1。
  • 在满足偶数的情况下不断除2,直到m不超过n为止。
  • 最后将m不断执行+1操作,得到n。

因为先除2直到不超过n,再+1所用的操作数,比 先+1得到n的偶数倍数,再除2得到n所用的操作次数少。(毕竟加的1最后要除2)

Code:
const int N = 200010;
int T, n, m, a[N];//思路2
int main(){cin>>n>>m;if(m<=n){cout<<n-m;return 0;}ll ans=0;while(m>n){if(m%2){m++;ans++;}m/=2;ans++;}ans+=n-m;cout<<ans;return 0;
} 

279/B Books

大意:

给出长度为n的数列和m,问从哪个地方开始,往后到达的位置最远。满足走过的数之和不超过m。输出最长的长度。

思考:

思路1:二分
先用前缀和预处理,然后遍历每个位置二分得到最远能够到达的位置。取差值的最大值。
因为前缀和处理后,数列单调递增,找到不超过a[i-1]+m的最后一个位置。

注意:可能遍历的当前位置长度为0,也就是当前值都超过m。所以需要将 l 设为 i - 1。

Code:
const int N = 200010;
int T, n, m, a[N];int main(){Ios;cin>>n>>m;for(int i=1;i<=n;i++) cin>>a[i],a[i]+=a[i-1];a[n+1]=2e9+10;int ans=0;for(int i=1;i<=n;i++){int l=i-1,r=n; //二分从当前位置能到达的最远位置,注意可能当前位置也不行,所以最左端从i-1开始 while(l<r){int mid=l+r+1>>1;if(a[mid]<=a[i-1]+m) l=mid;else r=mid-1;}ans=max(ans,l-i+1);}cout<<ans;return 0;
}

思路2:双指针
因为右端点不会回头,所以可以用双指针,从前往后遍历左端点,不断向右更新有端点。

Code:
const int N = 200010;
int T, n, m, a[N];int main(){Ios;cin>>n>>m;for(int i=1;i<=n;i++) cin>>a[i],a[i]+=a[i-1];a[n+1]=2e9+10;// 双指针:遍历左端点,右端点不会回头 int j=1,ans=0;for(int i=1;i<=n;i++){while(a[j]<=a[i-1]+m) j++;ans=max(ans,j-i);}cout<<ans;return 0;
}

497/C Exams

大意:

给出两个长度为n的数列a, b(b[i]<a[i]),对于每个i,可以选择a[i]或者b[i]。从前到后,选择的数不递减。
考虑着n个位置的先后,使得最终顺序的a[i]呈不递减序列。同时,使得选择的最后一个元素尽可能小。输出这个最小值。

思考:

a[i]和b[i]捆绑,结构体存储。
无论当前i是选a[i]还是b[i],最终顺序的a[i]一定是非递减的。所以先将按照a[i]将结构体排序。
在满足a[i]非递减的情况下,要使得选择的最后一个元素最小,所以对于遍历到的位置i,如果b[i]大于上一个选择的,当前位置就选择b[i],否则就选a[i]。

Code:

const int N = 200010;
int T, n, m;
PII a[N];int main(){cin>>n;for(int i=1;i<=n;i++) cin>>a[i].first>>a[i].second;sort(a+1,a+n+1);int ans=0;for(int i=1;i<=n;i++){if(a[i].se>=ans) ans=a[i].second;else ans=a[i].fi;}cout<<ans;return 0;
}

今天是刷codeforces的1400的第一天。
晚上6点半到9点半,把这4个题搞通透,速度有点慢。
加油!

1400——489C,520B,279B,479C相关推荐

  1. 数据分析,如何看待我国1400万人忍受极端通勤,单程通勤超60分钟!

    女生极限通勤每天来回 6.5 小时,上海某位女士公司离家单程约100公里左右,单程通勤需要3小15分,来回通勤时间为6.5小时.如此长的通勤时间却不是个例,全国有超1400万人正在忍受单程超过60分钟 ...

  2. 年薪超1400万美元,库克即将卸任,谁接掌苹果CEO?

    本文转载自 新智元 苹果公司今日发布了年度股东大会通知和代理声明,宣布将于太平洋时间 2 月 23 日 9 点 (北京时间 2 月 24 日凌晨 1 点) 举办年度股东大会. 与此同时,苹果公司还公布 ...

  3. 最新单步目标检测框架,引入双向网络,精度和速度均达到不错效果

    作者 | Tiancai Wang等 译者 | 路一直都在 出品 | AI科技大本营(ID:rgznai100) one-stage的目标检测方法因其具有实时性强.检测精度高等特点,近年来受到广泛关注 ...

  4. 十年公务员转行IT,自学AI三年,他淬炼出746页机器学习入门笔记

    整理 | Jane 编辑 | Just 出品 | AI科技大本营(ID:rgznai100) 近期,梁劲传来该笔记重大更新的消息.<机器学习--从入门到放弃>这本笔记的更新没有停止,在基于 ...

  5. 我,某大学副教授+副处级,工资7300/月,老婆天天骂我窝囊废……

    中部211副教授, 国家和学校给的钱,到手7000块左右,年底学校有1W多的岗位津贴绩效以及学院的5000块奖金,这些一年有10W:课题组一般每年有3万左右:学校的公积金和住房补贴包含自己交的有2.2 ...

  6. Linux命令screen—终端切换,工作环境保存,画面同步,防断网

    Screen基础 创建一个新的窗口 会话分离与恢复 清除dead 会话 关闭或杀死窗口 screen 高级应用 会话共享 会话锁定与解锁 发送命令到screen会话 屏幕分割 Reference 猜你 ...

  7. 头秃,在线求名字:网易使用昵称交流,再也没有“哥,姐,总”

    整理 | 王晓曼 出品 | 程序人生(ID:coder_life) 9月1日中午,网易以邮件形式向所有员工发布了一则与称呼相关的通知:以后员工在内部沟通中将去掉"哥"." ...

  8. 寻找下半年潜力币,压中一个,不负牛市

    尽管上半年的加密货币市场经历了主流币轮动和群魔乱舞,但大多数投资者还是保持乐观态度,认为本轮的牛市时长可达到历史之最,也对牛尾的疯狂抱有绝对的期望值.今年比特币的价格领衔表演突破了很多人的理解极限,但 ...

  9. GitHub免费支持CI/CD了,开发测试部署高度自动化,支持各种语言,网友:第三方凉凉...

    郭一璞 栗子 发自 凹非寺 量子位 出品 | 公众号 QbitAI GitHub激动地宣布,终于支持CI/CD了. CI\CD,全称:持续集成 (Continuous Integration) ,持续 ...

最新文章

  1. MsSQL学习第五章---排序和分页
  2. MyBatisPlus分页
  3. 深入探讨SDN拓扑发现机制:新的攻击及实践对策【SDN拓扑】(上)
  4. 公开资料整理网是什么_50份精选+阿咪整理的灵性/修行资料公开免费分享
  5. 巨人网络第三季度营收5.06亿元 净利润3亿元
  6. FTP文件服务搭建与同步传输
  7. ArcGIS空间数据的拓扑处理
  8. 冲刺倒计时,复习核心是什么?
  9. Affymetrix SNP6.0芯片分析
  10. html5 css3学习资料、教程、实例收集
  11. Linux2.6--中断机制中的 ksoftirqd
  12. glassfish配置错误问题 1
  13. matlab求26个字母的组合方式,26个字母识别 用matlab实现的
  14. java中内边距跟外边距,padding和margin——内边距和外边距
  15. 学习廖雪峰Git入门教程--总结
  16. 设计模式(三):“花瓶+鲜花”中的装饰者模式(Decorator Pattern)
  17. vc6 调试 附加到进程 列表空_今天,进程告诉我线程它它它它不想活了
  18. Oracle X$Tables
  19. html导航默认选中状态,css 导航栏下划线跟随效果,默认第一个li为选中状态
  20. 重学数据结构与算法系列:一文讲透贪心算法

热门文章

  1. Kotlin-Android世界的一股清流-流程控制
  2. 双曲线和直线联立公式_谈直线和双曲线的位置关系之(1)联立方程法
  3. 数值分析基础工具使用Matlab绘制双曲线
  4. KeyShot中的阴影效果该怎么制作
  5. Layout室内设计施工图——PDF矢量图纸输出和显示模式区别
  6. MySQL删除表的三种方式
  7. 教你微信怎么加更多好友的绝佳方法
  8. 工具类-随即获取姓名-ZH
  9. 某宝付费买的价值上万的60G的Python学习资源,0基础轻松赚钱到手软,请低调使用,禁止外传~...
  10. craftsmanship中文_craftsmanship