A. Contest Start

分析:
首先不难想到倒数第⌊t/x⌋\lfloor t/x\rfloor⌊t/x⌋个人开始, 每往后数一个人, 不满值会减一, 故可以得出:
answer=n∗(n−1)2,n≤⌊t/x⌋answer = \frac{n*(n-1)}{2} \space \space ,n\le\lfloor t/x\rflooranswer=2n∗(n−1)​  ,n≤⌊t/x⌋
考虑从倒数第⌊t/x⌋\lfloor t/x\rfloor⌊t/x⌋个人往前数, 每个人都能积攒相同的怒值, 这个值为⌊t/x⌋\lfloor t/x\rfloor⌊t/x⌋.
记k = ⌊t/x⌋\lfloor t/x\rfloor⌊t/x⌋. 于是可以得到:
answer=(n−k)∗k+k∗(k−1)2,n>⌊t/x⌋answer = (n-k)*k+\frac{k*(k-1)}{2}\space \space, n>\lfloor t/x\rflooranswer=(n−k)∗k+2k∗(k−1)​  ,n>⌊t/x⌋
代码:

#include <iostream>
#include <algorithm>
using namespace std;int main()
{int K; cin >> K;while(K--){long long n, x, t; cin >> n >> x >> t;long long ans = 0;if(n > t/x) {ans = (n-t/x) *(t/x);t /= x;ans += t*(t-1)/2;    }    else ans = n*(n-1)/2;cout << ans << endl;}// system("pause");
}

B. Love Song

分析:
前缀和做到O(n)预处理, O(1)查询即可
代码:

#include <iostream>
using namespace std;
const int N = 200001;
char s[N];
long long a[N];
int main()
{int n, q; cin >> n >> q;scanf("%s",s);for(int i = 0; i < n; i++){a[i+1] = a[i] + (s[i]-'a'+1);}for(int i = 0; i < q; i++){int l, r; scanf("%d %d",&l,&r);printf("%lld\n",a[r]-a[l-1]);}// system("pause");
}

C. Stable Groups

分析:
贪心.
每次选取最小代价可以合并的两段来合并即可. 正确性是显然的.
可以使用堆来维护.

#include <algorithm>
#include <iostream>
#include <queue>
using namespace std;
typedef long long LL;
LL a[300100];
priority_queue<LL, vector<LL>, greater<LL>> q;
int main()
{LL n, k, x; cin >> n >> k >> x;for(int i = 0; i < n; i++) scanf("%lld",&a[i]);sort(a, a+n);for(int i = 0; i < n-1; i++){if(a[i+1]-a[i] > x) {LL tmp = a[i+1]-a[i];q.push((tmp)/x + (tmp%x!=0) -1);}}// cout << q.size() << endl;while(q.size() && k >= q.top()){k -= q.top();q.pop();}cout << q.size()+1 << endl;// system("pause");
}

D. PriceFixed

分析:
还是贪心.
以bi{b_i}bi​为第一关键字非降序排序.
排序完, 显然高位的商品可以打折 那么低位的也可以打折。
也就是高位打折的概率低些,低位打折的概率高些。
那么当不能打折的时候我们就去买高位的,可以打折的时候从低位买起。
这个贪心策略所得出的结果是所有商品都恰好aia_iai​的最好价格, 如果最优策略不是所有商品都恰好买的情况, 这个策略是不一定最优的.
但不用担心, 因为一定存在一种最优策略是刚好买aia_iai​个的.
原因很简单, 假设存在一个最优解不是刚好买aia_iai​个, 考虑到打折1块, 原价2块, 如果不是刚好的话, 额外买的商品应该是拿来凑数打折的, 否则不可能价格最优. 那么我们可以直接如此构造: 所有被额外商品凑数打折的商品原价买, 凑数商品不买, 可得到最优解.
代码:

#include <algorithm>
#include <queue>
#include <iostream>
using namespace std;
typedef long long LL;
struct node{LL a, b;bool operator < (const node& o) const{return b < o.b;}
}p[200100];
LL c[200100];
int main()
{int n; cin >> n;for(int i = 1; i <= n; i++) scanf("%lld %lld",&p[i].a,&p[i].b);sort(p+1, p+1+n);int r = n, l = 1;LL sum = 0, cost = 0;while(l <= r){// for(int i = 1; i <= n; i++) cout << c[i] << " "; cout << cost << ":" << sum << endl;if(sum >= p[l].b){// printf("%lld %lld %lld\n",sum, p[l].a, c[l]);cost += p[l].a - c[l];sum += p[l].a - c[l];c[l] = p[l].a;l++;continue;}else{LL sub = min(p[r].a-c[r], p[l].b-sum);if(sub == 0) { r--; continue; }c[r] += sub;cost += 2*sub;sum += sub;if(p[r].a - c[r] == 0) r--; continue;}}// for(int i = 1; i <= n; i++) cout << c[i] << " "; cout << endl;cout << cost << endl;// system("pause");
}

Codeforces Round #727 (Div. 2)题解A-D相关推荐

  1. Codeforces Round #727 (Div. 2) 题解

    文章目录 A. Contest Start B. Love Song C. Stable Groups D. PriceFixed E. Game with Cards F. Strange Arra ...

  2. Codeforces Round #727 (Div. 2)2021.6.20

    Codeforces Round #727 (Div. 2) 闲话:打完省赛打cf,很不在状态地硬撑,wa和t了几次挺傻的地方,d题五分钟云出思路脑抽了调不出来.最后c还fst了.可以算的我拿去whi ...

  3. Codeforces Round #514 (Div. 2)题解

    Codeforces Round #514 (Div. 2)题解 A 喵,直接模拟. B 枚举所有盖章时的,合法的,左上角的位置.能盖的话就盖一下.最后check一下图案是否相等即可 C 一轮一轮的扔 ...

  4. Codeforces Round #727 (Div. 2) E. Game with Cards dp + 思维

    传送门 文章目录 题意: 思路: 题意: 初始有左右手,上面各有一个数字为000的卡牌,每次都有一个新卡kik_iki​,你可以将其放在左手或者右手,使两只手上的卡片范围在[ll,i,rl,i][l_ ...

  5. Codeforces Round #727 (Div. 2) F. Strange Array 线段树 + 区间合并 + 排序优化

    传送门 文章目录 题意: 思路: 题意: 给你一个长度为nnn的数组,对每个位置iii求一个最大价值,价值计算方式如下:选择一个包含iii的[l,r][l,r][l,r],让后将其拿出来排序,之后价值 ...

  6. Codeforces Round #182 (Div. 1)题解【ABCD】

    Codeforces Round #182 (Div. 1)题解 A题:Yaroslav and Sequence1 题意: 给你\(2*n+1\)个元素,你每次可以进行无数种操作,每次操作必须选择其 ...

  7. 【算法题解】Codeforces Round #817 (Div. 4)题解

    文章目录 Codeforces Round #817 (Div. 4)题解 A. Spell Check B. Colourblindness C. Word Game D. Line E. Coun ...

  8. Codeforces Round #747 (Div. 2)题解

    Codeforces Round #747 (Div. 2)题解 (本博客将持续更新以后每场CF div2的题解,喜欢ACM.OI的小伙伴记得点个关注哟) 昨天夜晚刷网络流刷入迷了,渐渐就忘记了我还要 ...

  9. Codeforces Round #789 (Div. 2)题解

    Codeforces Round #789 (Div. 2)题解 A. Tokitsukaze and All Zero Sequence 原题链接 算法标签 贪心 排序 思路 情况一:数组存在零 → ...

最新文章

  1. mysql连接hang住问题分析
  2. python可以修图吗_会照片处理的不只是ps,还有Python!
  3. jpg图片转eps 用于LaTeX
  4. 下面关于html的描述正确的一项是,1 x 证书 Web 前端开发初级理论考试试卷五(2)...
  5. ARM汇编基础详解(PS学习汇编的原因)
  6. 注册登录页面代码用js判断是否填入信息_php实现登录功能
  7. 《天天数学》连载34:二月三日
  8. 7.Appium 安卓自动化(Package与Activity)
  9. 掌握 git reset 使用
  10. linux下mysql日志管理及mysql备份还原
  11. 特征选择和共线性问题
  12. chrome插件开发引入图片静态资源
  13. python的中介效应 调节效应
  14. 计算机应用基础——计算机硬件(三)
  15. java输出精度到0.1_【java】浮点数精度问题,为什么0.1===0.1 5+0.1 = 5.1?
  16. java类求圆的面积周长_java编程 1. 设计一个求圆的面积和周长的类,要求:1计算当半径r,JAVA编程题。编写一个应用程序计算圆的周长和面积,设圆的半...
  17. 《孙悟空大战白骨精》小游戏
  18. L1-030 一帮一 (15分) “一帮一学习小组”是中小学中常见的学习组织方式,老师把学习成绩靠前的学生跟学习成绩靠后的学生排在一组。本题就请你编写程序帮助老师自动完成这个分配工作,即在得到全班学生
  19. 互联网创业如何起步(二)
  20. 忽略链路状态的功能详解——网络测试仪实操

热门文章

  1. Linux学习笔记RHEL 7(九)--RHEL7.0 DNS服务配置
  2. WEB网站压力测试教程详解
  3. 瑞吉外卖项目学习笔记01
  4. 视频加密中的“一机一码”是什么意思?
  5. jmeter菜鸟教程(jmeter安装教程)
  6. 前端开发--箭头函数
  7. python恶搞代码打开对方摄像头_Python 3 利用 Dlib 实现摄像头实时人脸检测和平铺显示...
  8. 3d打印打印头heating failure报错
  9. 揭秘潜伏在QQ群里面的低调高收入者
  10. 用计算机判断函数单调性吗,判断函数单调性的常用方法