C. Numbers on Whiteboard(模拟+贪心) Educational Codeforces Round 96 (Rated for Div. 2)
原题链接: https://codeforces.com/contest/1430/problem/C
测试样例
input
1
4
output
2
2 4
3 3
3 1
题意: 给定一个 1 1 1~ n n n的序列,你每次需要选择两个数 a , b a,b a,b删除,再将 ( a + b + 1 ) / 2 (a+b+1)/2 (a+b+1)/2这个数放回序列中。最后使得这个序列变成一个数,且这个数要尽可能小。输出这个最小数,以及你依次进行的操作选择数。
解题思路: 我们要使得最后剩余的数最小,那么我们一定要知道,让选择大数和小数最后中和得到的一定不是最小,因为这样两个都往中间靠了。所以我们想要让这往左靠,就必须选择两个最大的数进行操作,再将合成数放回序列中,再依次进行如上操作,直到剩余最后一个数。 那么我们很容易就会想到利用优先队列来实现,即每次取队头两个数,并记录(最后输出需要用到。),同时删除这两个数,并将合成数放入队列中模拟操作即可。直到队列中只剩一个元素即为答案。OK,具体看AC代码。
AC代码
/*
*邮箱:unique_powerhouse@qq.com
*blog:https://me.csdn.net/hzf0701
*注:文章若有任何问题请私信我或评论区留言,谢谢支持。
*
*/
#include<bits/stdc++.h> //POJ不支持#define rep(i,a,n) for (int i=a;i<=n;i++)//i为循环变量,a为初始值,n为界限值,递增
#define per(i,a,n) for (int i=a;i>=n;i--)//i为循环变量, a为初始值,n为界限值,递减。
#define pb push_back
#define IOS ios::sync_with_stdio(false);cin.tie(0); cout.tie(0)
#define fi first
#define se second
#define mp make_pairusing namespace std;const int inf = 0x3f3f3f3f;//无穷大
const int maxn = 1e5;//最大值。
typedef long long ll;
typedef long double ld;
typedef pair<ll, ll> pll;
typedef pair<int, int> pii;
//*******************************分割线,以上为自定义代码模板***************************************//int t;
int n;
struct node{int x,y;
};
int main(){//freopen("in.txt", "r", stdin);//提交的时候要注释掉IOS;while(cin>>t){while(t--){cin>>n;priority_queue<int> q;rep(i,1,n){q.push(i);}vector<node> v;while(q.size()>1){int temp1=q.top();q.pop();int temp2=q.top();q.pop();v.push_back({temp1,temp2});q.push((temp1+temp2+1)/2);}cout<<q.top()<<endl;int len=v.size();rep(i,0,len-1){cout<<v[i].x<<" "<<v[i].y<<endl;}}}return 0;
}
C. Numbers on Whiteboard(模拟+贪心) Educational Codeforces Round 96 (Rated for Div. 2)相关推荐
- Educational Codeforces Round 96 (Rated for Div. 2) C. Numbers on Whiteboard(构造)
C. Numbers on Whiteboard 题意: 给你一个排列1-n,每次可以选择两个数,( ⌈ a + b 2 ⌉ \lceil \frac{a+b}{2} \rceil ⌈2a+b⌉)进 ...
- Educational Codeforces Round 96 (Rated for Div. 2)
今天先补了上一场的Codeforces Global Round 11三道题,做的心神恍惚,然后17点报名没敢提交,先写了4个题剩下的改天补一补 我是真的服信号,卷积卷si我了 A - Number ...
- Educational Codeforces Round 96 (Rated for Div. 2)C. Numbers on Whiteboard(贪心算法(水题))
题目链接: 传送门 题目贴上: 题意:,给你 1-n个数,你可以对两个不同位置的数进行合并,比如a和b,合成数变成(a+b)/2,结果四舍五入.放在数组末尾,删除原来的a和b,举例子吧 就这样子两两合 ...
- Educational Codeforces Round 96 (Rated for Div. 2) C. Numbers on Whiteboard///思维
cf地址 题目大意:给一个数n,有1~n的数,每次现在两个数a,b,将这两个数去掉,然后添加一个(a+b)/2的数(向上取整),进行n-1次操作后,问你最后剩下的数最小是多少. 思路:最小的数必定为2 ...
- 贪心 ---- Educational Codeforces Round 90 (Rated for Div. 2)E. Sum of Digits[数位贡献+思维题+贪心]
题目链接 题目大意:就是给你nnn和kkk然后再定义一个函数f(x)是十进制数x各个位数之和f(x)是十进制数x各个位数之和f(x)是十进制数x各个位数之和 叫你求出最小的x使得f(x)+f(x+1) ...
- 贪心 ---- Educational Codeforces Round 90 (Rated for Div. 2)D Maximum Sum on Even Positions[偶数子段最大和]
题目链接 题目大意:给你一个序列你可以选择一个连续的子段将其反转,反转后使得偶数位置上的数字和最大 1.很明显我们可以看出反转的字符串的长度一定是偶数的,因为是奇数的话偶数位还是在偶数位不变所以没有用 ...
- Educational Codeforces Round 96 (Rated for Div. 2) ABCD
很久不写题解了 因为最近一直在刷acwing和kuangbin的专题 acwing题解直接在acwing上传了 而kuangbin做了几个半个专题 完整了会写题解的 因为身体原因最近总是眼睛疼所以很少 ...
- Educational Codeforces Round 75 (Rated for Div. 2) E2. Voting (Hard Version) 贪心
传送门 文章目录 题意: 思路: 题意: n≤2e5,m≤n,p≤1e9n\le2e5,m\le n,p\le 1e9n≤2e5,m≤n,p≤1e9 思路: 首先需要发现一些性质,假设preipre_ ...
- Educational Codeforces Round 90 (Rated for Div. 2)(A, B, C, D, E)
Educational Codeforces Round 90 (Rated for Div. 2) Donut Shops 思路 分三种情况: a==c/ba == c / ba==c/b这个时候两 ...
最新文章
- CentOS7安装Composer
- 在centos上使用openswan搭建IPSec***
- M4i—下一代高速数据采集、数字化仪平台
- 【转】 ubuntu adduser 命令学习
- JS经典面试题05-变量连续声明var a = b = 1
- Golang map 如何进行删除操作?
- opencv 平面法向量_在OpenCV中绘制平面的法向量
- 使用字符串切割,使手机号中间四位隐藏
- 【翻译】ANDROID KTX – 使用Kotlin进行Android开发
- 用html5点击消失,input点击后placeholder中的提示消息消失
- log4j配置文件配置及解读
- gsp计算机管理系的功能,医药系统的GSP管理
- Symbian手记【四】 —— Symbian的容器
- 基于netty实现gps jtt808协议接入
- 小学计算机教师应聘简历,应聘小学教师的个人简历模板
- MySQL学习笔记--常用存储引擎InnoDB与MyISAM总结
- DSP28377D开发笔记(一) 初步认识DSP28377D芯片
- [ACNOI2022]猜数
- uni-app使用ucharts图表 ##uni-app ##uCharts
- keil 的bug日记