[CF]_[心得]_[877C]
来源:互联网 发布:2017淘宝加权重刷法 编辑:程序博客网 时间:2024/06/08 08:48
斯拉瓦克扮演他最喜欢的游戏“和平闪电”。现在他正在一个非常具体的地图上飞行一架轰炸机。
正式地,地图是大小为1×n的方格域,其单元格从1到n编号,在每个单元格中可以有一个或多个坦克。斯拉瓦不知道坦克的数量和他们的位置,因为他飞得很高,但他可以在任何一个单元格中放一个炸弹。这个单元格中的所有坦克都将被损坏。
如果坦克第一次受到伤害,它会立即移动到相邻的一个单元之间(单元格n中的一个槽只能移动到单元格n - 1,单元格1中的一个槽只能移动到单元2) 。如果一个坦克第二次受到伤害,它被算作被破坏,再也不会动作。这些坦克首先被损坏时才会移动,它们不会自动移动。
帮助Slava尽可能少的炸弹来摧毁所有坦克。
输入
第一行包含单个整数n(2≤n≤100000) - 地图的大小。
产量
在第一行打印m - 最少数量的炸弹Slava需要摧毁所有坦克。
在第二行打印m个整数k1,k2,…,km。数字ki意味着第i颗炸弹应该被放在细胞。上。
如果有多个答案,您可以打印任何一个。
题目乍一看有点别扭,不好理解,第一次的WA时的确是由于题目理解偏差。n个格子,每个里面都有一些坦克(为了保证全部消灭,可以看作两组),每次轰炸,对于第一次受损的坦克,一组向左移一格,二组向右移一格(除两端点处),第二次受损则消失。
先提出一种可行方案,分三步:
1,先向偶数格中丢炸弹(共n/2个,整除)。此时所有的坦克均移到奇数格中。
2,再向奇数格中丢炸弹(n为偶数时共n/2个,n为奇数时共n/2+1个)。此时已经移动过的坦克被破坏,剩下的全部移入偶数格中。
3,最后在向偶数格中丢一次炸弹(共n/2个),将剩余坦克破坏。
如此,当n为偶数时,共需要(n/2*3)枚炸弹,n为偶数时共需要(n/2*3+1)枚炸弹。
投弹次序即:所有偶数格,所有奇数格,再所有偶数格。
这样的方案是可以AC的,但我只是在直觉上觉得这样是投弹最少的,但为什么,一时想不清楚。这里做个标记。
最后贴代码
#include<stdio.h>int main(){ long int i,n; scanf("%ld",&n); if (n % 2 == 0) { printf("%ld\n",n/2*3); for(i = 1; i <= n/2;i++) printf("%d ",i*2); for(i = 1; i <= n/2;i++) printf("%d ",i*2-1); for(i = 1; i <= n/2;i++) printf("%d ",i*2); } else { printf("%ld\n",n/2*3+1); for(i = 1; i <= n/2;i++) printf("%d ",i*2); for(i = 1; i <= n/2+1;i++) printf("%d ",i*2-1); for(i = 1; i <= n/2;i++) printf("%d ",i*2); }return 0;}
- [CF]_[心得]_[877C]
- [CF]_[心得]_[869B]
- [CF]_[心得]_[870B]
- C语言_心得总结_1
- CF#205_题解
- 心得_杂七杂八
- c+_+
- C#_多线程_ 整理
- C#_事件_委托
- 实训心得_魏明伟
- cf C. Marina and Vasya (字符串处理_模拟吧)
- cf C. Duff and Weight Lifting (二进制编码_好题)
- C/C++_
- C/C++_扫雷
- [C/C++]_[初级]_[原子操作]
- ^_^
- ^_^
- ^_^
- 致敬初代iPhone?传苹果十周年新机将采用“水滴形”设计
- 生活随笔
- 奚梦瑶倾情演绎,vivo Xplay6全新配色23日公布
- 腾讯“押注”印度市场,与微软、eBay共同投资印度最大电商网站Flipkart
- 李彦宏再强调人工智能 向以色列总理称AI前景堪比工业革命
- [CF]_[心得]_[877C]
- 先于Hyperloop One一步,“HTT”宣称正在建造世界首条载人超级高铁
- 进程间通讯:共享内存
- 猎豹发布2016 Q4 财报,仍在转型中找到了盈利模式
- 全资被收的大麦网 联动虾米音乐拉动阿里大文娱引擎
- 传三星虚拟助手Bixby将延迟推出,可支持非旗舰手机
- C语言数据结构顺序存储字符串
- Shader效果之波涛汹涌
- python记录仪_在2048中学习到的函数