Educational Codeforces Round 117 (Rated for Div. 2) ABCDE
A
题意:
- 给出A坐标(0,0)和B坐标,d表示两点横纵坐标绝对值之和。
- 求是否存在C(x,y)满足d(A,C)=d(B,C)=d(A,B)/2,不存在就-1.
思路:
- d(A,B)直接已知,如果是个奇数就-1。
- 因为A是00,所以C坐标x+y直接已知,然后枚举C的x和y,代入计算d(B,C)是否满足条件即可
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int maxn = 1e5+10;int main(){ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);int T; cin>>T;while(T--){int xb, yb; cin>>xb>>yb;int dab = xb+yb;if(dab%2==1){cout<<"-1 -1\n";continue;}int d = dab/2, ok = 1;for(int i = 0; i <= d; i++){int j = d-i;int x = abs(i-xb)+abs(j-yb);if(x==d){cout<<i<<" "<<j<<"\n";ok = 0;break;}}if(ok==1){cout<<"-1 -1\n";continue;}}return 0;
}
B
题意:
- 给出n,a, b,判断是否存在长度为2n的排列。
- 满足左半边的所有元素的最小值等于 a,右半边的所有元素中的最大值等于 b。
思路:
- 左边n个中,先放个a,然后从2n往小的枚举,不是b就填上。右边放个b,从1往大的枚举。
- 如果从大到小或从小到大放的过程中遇到了自己,即数字不够用了,那么就-1。放完了就输出。
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int maxn = 1e5+10;
int v[maxn];
int main(){ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);int T; cin>>T;while(T--){int n, a, b; cin>>n>>a>>b;int ok = 1;v[1] = a;int cur = 1;int cnt = 0;for(int i = n; i >= 1; i--){if(cnt==n/2-1)break;if(i!=b){v[++cur] = i;cnt++;}if(i==a){ok = 0; break;}}cnt = 0;cur = n/2+1;v[cur] = b;for(int i = 1; i <= n; i++){if(cnt==n/2-1)break;if(i!=a){v[++cur] = i;cnt++;}if(i==b){ok = 0;break;}}if(ok==0){cout<<"-1\n"; continue;}for(int i = 1; i <= n; i++){cout<<v[i]<<" ";}cout<<"\n";}return 0;
}
C
题意:
- 给出k,你需要发送最多2k-1条消息,每条消息分别包含1->k,k->1个表情。
- 你一共可以发送x个表情,求你最多可以发送多少条消息(没打完也算一条)
思路:
- 表情和消息的关系是,等差数列求和。设发了i条消息,则表情数sum可以计算。
i<=k sum =(1+i)*i/2 < x
i>=k sum = (1+k)*k/2+(sum2)
, sum2 = (k-1+j)*(k-j)/2 < x,j=i-k - 令总数sum=x作为边界,反向可以算出消息条数i,暴力一下附近的几个数可以避免对边界的讨论。
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int maxn = 1e5+10;
int main(){ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);int T; cin>>T;while(T--){LL k, x; cin>>k>>x;LL all = k*(k-1)+k, haf = (1+k)*k/2;if(all < x){ cout<<2*k-1<<"\n"; continue;}LL i = (LL)(sqrt(x*2)-1);if(x <= haf){LL now = (1+i)*i/2;while(now < x){i++;now += i;}cout<<i<<"\n";}else{//cout<<"tmp"<<"\n";x -= haf;LL i = (LL)(sqrt((k+1)*(k+1)-2*x)-1);LL cnt = k-i;LL now = (k-1+i)*(k-i)/2;// cout<<"now"<<now<<" "<<cnt<<"\n";while(now < x){i--;cnt++;now += i;}cout<<k+cnt<<"\n";}}return 0;
}
D、
题意:
- 给出数对(a,b)和x,每次可以令a=|a-b|或者b=|a-b|,判断能否若干次操作后得到x。
思路:
- 每次都|a-b|不难想到gcd和辗转相除法,所以可以按照gcd的方式递归下去。
- 如果过程中出现了(a-x)%b==0,即a和x同余b,那就可以不断的用a减去b直到获得x,此时返回true,否则若最后除完了也得不到,那就得不到了。
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int maxn = 1e5+10;
bool check(LL a, LL b, LL x){if(!b)return a==x;if(x<=a && (a-x)%b==0)return 1;return check(b,a%b,x);
}
int main(){ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);int T; cin>>T;while(T--){LL a, b, x; cin>>a>>b>>x;if(a < b)swap(a,b);if(check(a,b,x))cout<<"YES\n";else cout<<"NO\n";}return 0;
}
E、
题意:
- n个学生,每个学生需要阅读到消息mi,但是他最多只会阅读ki条消息。
- 老师可以固定?条消息,然后学生阅读到mi的概率为 min(ki, ?)/?。
- 求老师固定哪些消息,可以让学生阅读到需要阅读的消息的总期望值最大。
思路:
- 因为k<=20, mi <= 2e5,所以可以直接暴力枚举需要固定的消息条数i。
- 然后暴力每个学生需要阅读的消息对期望的贡献,即消息m[j]对应的贡献a[m[j]] += min(k[j],i),按照贡献对这两万条消息从大到小排序,取最大的前i条,更新答案即可。
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int maxn = 2e5+2000;
int m[maxn], k[maxn];
pair<int,int>a[maxn];
int main(){ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);int n; cin>>n;for(int i = 1; i <= n; i++)cin>>m[i]>>k[i];LL x = 0, y = 1;vector<int>ans;for(int i = 1; i <= 20; i++){ //暴力贴i条消息for(int j = 1; j <= 200000; j++)a[j] = {0,j}; //暴力消息mi=jfor(int j = 1; j <= n; j++)a[m[j]].first += min(k[j], i);sort(a+1,a+200000+1);reverse(a+1,a+200000+1);LL s = 0;for(int j = 1; j<= i; j++) s+=a[j].first; //取最大的i条if(x*i < y*s){x = s; y = i;ans.clear();for(int j = 1; j <= i; j++){ans.push_back(a[j].second);}}}cout<<ans.size()<<"\n";for(int x : ans)cout<<x<<" ";return 0;
}
Educational Codeforces Round 117 (Rated for Div. 2) ABCDE相关推荐
- Educational Codeforces Round 117 (Rated for Div. 2)题解(A~D)
Educational Codeforces Round 117 (Rated for Div. 2) 今天这场没打,赛后从九点半到十一点把前面四个题目给补了一下,E题明天有时间看看能不能弄出来. A ...
- Educational Codeforces Round 117 (Rated for Div. 2)
A. Distance B. Special Permutation C. Chat Ban D.X-Magic Pair E. Messages F:没看F,好难的样子 G. Max Sum Arr ...
- Educational Codeforces Round 114 (Rated for Div. 2) (A ~ F)全题解
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Educational Codeforces Round 114 (Rated for Div. 2) ...
- Educational Codeforces Round 106 (Rated for Div. 2)(A ~ E)题解(每日训练 Day.16 )
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 目录 Educational Codeforces Round 106 (Rated for Div. ...
- Educational Codeforces Round 37 (Rated for Div. 2) 1
Educational Codeforces Round 37 (Rated for Div. 2) A.Water The Garden 题意:Max想给花园浇水.花园可被视为长度为n的花园床,花园 ...
- 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这个时候两 ...
- Educational Codeforces Round 89 (Rated for Div. 2)(A, B, C, D)
Educational Codeforces Round 89 (Rated for Div. 2) A. Shovels and Swords 思路 题意非常简单,就是得到最多的物品嘛,我们假定a, ...
- Educational Codeforces Round 114 (Rated for Div. 2) D. The Strongest Build 暴力 + bfs
传送门 文章目录 题意: 思路: 题意: 你有nnn个装备槽,每个槽里面有cic_ici个力量加成,对于每个槽只能选一个力量加成,现在给你mmm个力量组合[b1,b2,...,bn][b_1,b_2 ...
- Educational Codeforces Round 72 (Rated for Div. 2) D. Coloring Edges dfs树/拓扑找环
传送门 文章目录 题意: 思路: 题意: 给你一张图,你需要给这个图的边染色,保证如果有环那么这个环内边的颜色不全相同,输出染色方案和用的颜色个数. n,m≤5e3n,m\le5e3n,m≤5e3 思 ...
最新文章
- pyqt 子控件更新父控件ui
- vs 命令行参数调试
- RAC+单实例DATAGUARD 配置
- mysql盲注学习-1
- c++将小写转换为大写函数_必须掌握的基础函数组合应用技巧,提高效率,准时下班...
- C++ 二进制文件读操作
- Hexo 入门指南(五) - 搬家 备份
- W3C发布DRM作为推荐方案
- 天梯——赌马 (20 分)
- 李阳疯狂英语900句 331-545
- 发那科机器人点位编辑_发那科机器人指令编辑大全
- 【Activity】Activity的启动模式:SingleTask
- 管理学五(手机的危害,积累与责任、见闻杂谈)
- 【Gem5】有关gem5模拟器的资料导航
- 毕业设计-基于JSP的网上购书系统.doc
- 百度,dingding 安装在ubuntu1604
- IEEE Access 上岸指南
- 计算机水平模拟软件卸载不了怎么办,有的软件卸载不了怎么办
- java读取excel总是有小数点的解决方案
- php制作报销系统,报销系统是如何实现全程费控-让企业费用支出更透明-更节省的?...