Educational Codeforces Round 103 (Rated for Div. 2)

第二次被别人hack,悲

A - K-divisible Sum

题意

给定两个整数 n,kn,kn,k,要求你建成一个正整数数组 aaa,满足 (a1+a2+…+an)(a_1 + a_2 + … + a_n)(a1​+a2​+…+an​) 能够被 kkk 整除,且使max(ai)max(a_i)max(ai​) 最小,输出 min(max(ai))min(max(a_i))min(max(ai​)) 。

思路

把 kkk 均匀的分到 nnn 个数里即可。如果 n>kn \gt kn>k,则找到比 nnn 大的最小的 kkk 的倍数,作为数组的总和;如果 n≤kn \leq kn≤k,则以 kkk 作为数组的总和。那么答案就是 (sum / n) + (sum % n) ? 1 : 0

这题被hack了,,,太大意了,用了while循环来求比 nnn 大的最小的 kkk,没考虑最坏情况1e9。

代码

#include<bits/stdc++.h>
#define INF 0x3f3f3f3f
#define PI acos(-1)
using namespace std;
typedef pair<int, int> P;
typedef long long ll;
const int N = 1e6 + 9;
const ll mod = 1e9 + 7;int main()
{int T;scanf("%d", &T);while(T--){ll k, n;scanf("%lld%lld", &n, &k);if(n > k){ ll kk = n / k;if(n % k)kk++;k = kk * k;}ll ans = k / n;if(k % n)ans++;printf("%lld\n", ans);}
}

B - Inflation

题意

给定与商品价格相关的数组 ppp,其中 p0p_0p0​ 代表商品的最初价格,pi(i∈[1,n−1])p_i \ (i \in [1, n - 1])pi​ (i∈[1,n−1])代表第 iii 天的时候,价格比前一天增长多少。现在要你修改数组中一部分元素的值,使得在每个元素都依然是整数的前提下,每天的增长率都小于给定的 kkk,且修改总量最少。(增长率 = 当天增长的值 / 增长前的价格)

思路

每次都加 p0p_0p0​ 上是最好的选择。第 kkk 天增长前的价格 pricek=∑i=0k−1piprice_k = \sum_{i = 0}^{k - 1} p_ipricek​=∑i=0k−1​pi​,所以增长率 K=pk∑i=0k−1piK = \frac{p_k}{\sum_{i = 0}^{k - 1} p_i}K=∑i=0k−1​pi​pk​​,而理想的 k≥pk∑i=0k−1pik \geq \frac{p_k}{\sum_{i = 0}^{k - 1} p_i}k≥∑i=0k−1​pi​pk​​,所以 k⋅∑i=0k−1pi≥pkk · \sum_{i = 0}^{k - 1} p_i \geq p_kk⋅∑i=0k−1​pi​≥pk​。若 k⋅∑i=0k−1pi<pkk · \sum_{i = 0}^{k - 1} p_i \lt p_kk⋅∑i=0k−1​pi​<pk​ ,则必然需要加上 pk−k⋅∑i=0k−1pip_k - k · \sum_{i = 0}^{k - 1} p_ipk​−k⋅∑i=0k−1​pi​ 的值。对这些必须要加的值进行累加(是累加而不是最大,这是现场犯的错误,可以仔细思考一下),就能得到最终答案。

代码

#include<bits/stdc++.h>
#define INF 0x3f3f3f3f
#define PI acos(-1)
using namespace std;
typedef pair<int, int> P;
typedef long long ll;
const int N = 1e6 + 9;
const ll mod = 1e9 + 7;ll a[500];int main()
{int T;scanf("%d", &T);while(T--){ll k, n;ll maxs = 0;scanf("%lld%lld", &n, &k);scanf("%lld", a);ll sum = a[0] * k;for(int i = 1; i < n; i++){scanf("%lld", a + i);ll exsum = a[i] * 100;//cout << exsum << ' ' << sum << endl;if(exsum > sum){maxs += (exsum - sum);sum = exsum;}sum += a[i] * k;}ll ans = maxs / k;if(maxs % k)ans++;printf("%lld\n", ans);}
}

C - Longest Simple Cycle

题意

有 nnn 条链,第 iii 条链上有 cic_ici​ 个结点,除第一条链外,每条链的第一个结点都和前一个链的第 aia_iai​ 个结点相连,每条链的最后一个结点都和前一个链的第 bib_ibi​ 个结点相连。定义simple cycle为首尾相连(环)且遍历此环路恰好每个点经过且经过一次的环,问这 nnn 条链能形成的最长的环路是多少长?

思路

参考:Educational Codeforces Round 103 (Rated for Div. 2) 【A,B,C】题解

把左半边环路和右半边环路分开看,

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mRxrBjgD-1612017280327)(C:\Users\29039\AppData\Roaming\Typora\typora-user-images\image-20210130222808554.png)]

分别贪心取最长即可。具体代码中体现。

代码

#include<bits/stdc++.h>
#define INF 0x3f3f3f3f
#define PI acos(-1)
using namespace std;
typedef pair<int, int> P;
typedef long long ll;
const int N = 3e5 + 19;
const ll mod = 1e9 + 7;ll a[N];
ll b[N];
ll c[N];int main()
{int T;scanf("%d", &T);while(T--){int n;scanf("%d", &n);for(int i = 0; i < n; i++){scanf("%lld", c + i);}for(int i = 0; i < n; i++){scanf("%lld", a + i);}ll maxx = 0;ll cnt = 0;for(int i = 0; i < n; i++){scanf("%lld", b + i);if(i == 0)continue;ll top = a[i];ll bot = b[i];if(top > bot){ll tmp = bot;bot = top;top = tmp;}if(i == 1){cnt = bot - top + 2;}else{if(top == bot){cnt = 2;}else{cnt = max(top - 1 + c[i - 1] - bot + cnt + 2, bot - top + 2);}}maxx = max(maxx, cnt + c[i] - 1);}printf("%lld\n", maxx);}
}

D - Journey

题意

有 n+1n + 1n+1 个城市,有 nnn 条路将他们相连,L表示只能从右往左走,R表示只能从左往右走,从一个地方出发,到达相邻城市后,所有路的方向都会变为反方向。求除从所有的城市出发,最多能经过多少不重复的城市?

思路

  1. 我只要能往左边走,我肯定能回到原点,右边同样,所以:往左可以走到多少城市+往右可以走多少城市+自己=最终答案;

  2. 第二,只讨论往左走的情况,第 iii 个城市可以由第 i−2i-2i−2 个城市推过来。如果我能走到第i-2个城市,那么第 iii 个城市往左能经过的城市个数 = 第 i−2i-2i−2 个城市往左走能经过的城市个数 +2+2+2 ;如果不能走到第 i−2i-2i−2 个城市,那么看看能不能走到第 i−1i-1i−1 个,能走到就是 111 个,不能就是 000 个
    最左的城市不能在往左走,所以是 000 个(指除自己以外);倒数第二左的城市,如果第一条路是L,那么他能到达一个城市(即最左边的城市),否则 000 个。

    往右走的情况以此类推。

代码

#include<bits/stdc++.h>
#define INF 0x3f3f3f3f
#define PI acos(-1)
using namespace std;
typedef pair<int, int> P;
typedef long long ll;
const int N = 3e5 + 19;
const ll mod = 1e9 + 7;char s[N];int L[N];
int R[N];int main()
{int T;scanf("%d", &T);while(T--){int n;scanf("%d", &n);scanf("\n%s", s);L[0] = 0;if(s[0] == 'L')L[1] = 1;elseL[1] = 0;for(int i = 1; i <= n; i++){if(s[i - 1] == 'L'){if(s[i - 2] == 'R'){L[i] = L[i - 2] + 2;}else{L[i] = 1;}}else{L[i] = 0;}}R[n] = 0;if(s[n - 1] == 'R')R[n - 1] = 1;elseR[n - 1] = 0;for(int i = n - 2; i >= 0; i--){if(s[i] == 'R'){if(s[i + 1] == 'L'){R[i] = R[i + 2] + 2;}else{R[i] = 1;}}else{R[i] = 0;}}for(int i = 0; i < n; i++){printf("%d ", L[i] + R[i] + 1);}printf("%d\n", L[n] + R[n] + 1);}
}

总结

  1. BD都犯简单错误,说明不仔细,且练的太少了不熟练;
  2. A题居然加了一个能被O(1)替代的1e9while循环在里面,当时脑子真的不清醒。。。
  3. 真是一手好牌打烂,A题不小心被hack,C题赛场上能出却心急了小错误没看出来,本来妥妥的1500变成1400。希望下次能静下心来,好好比赛。
  4. 其实edu场确实以前打的很少,那么算是明白一些教训了,这open hacking确实不是闹着玩的,官方的数据量一小hackers就狂喜,,,以后做题还是要小心谨慎

多多包涵,共同进步

Educational Codeforces Round 103 (Rated for Div. 2)前四题相关推荐

  1. Educational Codeforces Round 103 (Rated for Div. 2)A~E解题报告

    Educational Codeforces Round 103 (Rated for Div. 2) A. K-divisible Sum 原题信息 解题思路 AC代码 #include <b ...

  2. Educational Codeforces Round 103 (Rated for Div. 2)

    Educational Codeforces Round 103 (Rated for Div. 2) http://codeforces.com/contest/1476 A K-divisible ...

  3. Educational Codeforces Round 103 (Rated for Div. 2) D. Journey dp

    传送门 题意: 给n+1n+1n+1个点,每两个点之间有一个字符L(表示i+1连向i)L(表示i+1连向i)L(表示i+1连向i)或者R(表示i连向i+1)R(表示i连向i+1)R(表示i连向i+1) ...

  4. Educational Codeforces Round 100 (Rated for Div. 2)补题记录

    总结:感觉这个educational场好难啊(蒟蒻视角),又被虐了,唉 A. Dungeon 每一枪会造成1点伤害对一个单位,但是当开7的倍数枪时会造成3点伤害 每7次一个轮回,一个完整的轮回共造成9 ...

  5. Educational Codeforces Round 133 (Rated for Div. 2) D题

    题目链接:Problem - D - Codeforces 一道非常经典的完全背包求方案数题: 首先先写好我们的状态转移方程,那什么代表体积,什么代表物品数目呢: 其实很清晰k, k + 1 ... ...

  6. codeforces Educational Codeforces Round 49 (Rated for Div. 2) C题

    刚开始拿到这题很懵逼,知道了别人的思路之后开始写,但是还是遇到很多坑,要求求P2/S最大.p=a b.就是求(a2+ b2 +2ab)/ab最大,也就是a/b +b/a最大.那么题意就很明显了. 但是 ...

  7. Educational Codeforces Round 119 (Rated for Div. 2) 做题日志

    A Equal or Not Equal 题意 给你一个字符串, s i = = E si == E si==E表示 a ( i ) = = a ( i + 1 ) a(i) == a(i+1) a( ...

  8. Educational Codeforces Round 33 (Rated for Div. 2) B题

    B. Beautiful Divisors Recently Luba learned about a special kind of numbers that she calls beautiful ...

  9. Educational Codeforces Round 131 (Rated for Div. 2)刷题记录OR题解

    题解 A Grass Field 题面翻译 给出一个 2×22 \times 22×2 的矩阵,矩阵的值都是 000 和 111,定义一次操作:选择一个点,将其所在的行和列的点的值全部修改为 000, ...

最新文章

  1. 深究AngularJS——排序
  2. Java堆内存溢出代码示例
  3. 八十四、SpringBoot微服务Dubbo和Zookeeper分布式
  4. DRF的序列化——Serializers 序列化组件
  5. C++学习——构造函数,析构函数与虚函数关系
  6. 中国分省市地图导航-SVG格式(基于Raphaël)
  7. 【more effective c++读书笔记】【第5章】技术(5)——Reference counting(引用计数)(2)...
  8. ansible 第三次作业
  9. python吃显卡还是内存条_用游戏本打游戏是显卡重要还是内存重要?
  10. 逆向研究QCA9563固件,查看和修改GPIO定义
  11. 简单有限元分析技术(详细步骤讲解)
  12. AT&T拟利用电力线网络提供无线宽带服务
  13. FOXIT PDF EDITOR工具分割PDF
  14. MIMO-OFDM学习笔记(传播与衰落)
  15. 集成学习-Bagging和Pasting
  16. 2步迁移PC端微信聊天记录
  17. mysql嵌套select_select 嵌套查询
  18. 只做自己擅长的事——博发传媒
  19. 科研院所网管开发项目案例分析
  20. java千万级数据txt文件导入数据库

热门文章

  1. 大学物理光学阶段测试重点题型
  2. windows下查看进程PID
  3. 全球应用使用有地区国家差异
  4. 2021年危险化学品经营单位安全管理人员复审模拟考试及危险化学品经营单位安全管理人员作业模拟考试
  5. 负债率高达440%的远洋服务:严重依赖母公司,表现不及平均值
  6. 数字旅游解决方案_数字标牌将助力打造新中国服务经济 吸引更精准受众创造更多机遇...
  7. 知微传感3D相机SDK开发文档一查找相机
  8. 向服务端上传数据如何确保数据完整性、安全性
  9. 感谢漫威,感谢斯坦李,还有,谢谢你
  10. Odoo14如何开启debug模式?