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相关推荐

  1. Educational Codeforces Round 117 (Rated for Div. 2)题解(A~D)

    Educational Codeforces Round 117 (Rated for Div. 2) 今天这场没打,赛后从九点半到十一点把前面四个题目给补了一下,E题明天有时间看看能不能弄出来. A ...

  2. 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 ...

  3. Educational Codeforces Round 114 (Rated for Div. 2) (A ~ F)全题解

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Educational Codeforces Round 114 (Rated for Div. 2) ...

  4. Educational Codeforces Round 106 (Rated for Div. 2)(A ~ E)题解(每日训练 Day.16 )

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 目录 Educational Codeforces Round 106 (Rated for Div. ...

  5. Educational Codeforces Round 37 (Rated for Div. 2) 1

    Educational Codeforces Round 37 (Rated for Div. 2) A.Water The Garden 题意:Max想给花园浇水.花园可被视为长度为n的花园床,花园 ...

  6. 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这个时候两 ...

  7. 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, ...

  8. Educational Codeforces Round 114 (Rated for Div. 2) D. The Strongest Build 暴力 + bfs

    传送门 文章目录 题意: 思路: 题意: 你有nnn个装备槽,每个槽里面有cic_ici​个力量加成,对于每个槽只能选一个力量加成,现在给你mmm个力量组合[b1,b2,...,bn][b_1,b_2 ...

  9. Educational Codeforces Round 72 (Rated for Div. 2) D. Coloring Edges dfs树/拓扑找环

    传送门 文章目录 题意: 思路: 题意: 给你一张图,你需要给这个图的边染色,保证如果有环那么这个环内边的颜色不全相同,输出染色方案和用的颜色个数. n,m≤5e3n,m\le5e3n,m≤5e3 思 ...

最新文章

  1. pyqt 子控件更新父控件ui
  2. vs 命令行参数调试
  3. RAC+单实例DATAGUARD 配置
  4. mysql盲注学习-1
  5. c++将小写转换为大写函数_必须掌握的基础函数组合应用技巧,提高效率,准时下班...
  6. C++ 二进制文件读操作
  7. Hexo 入门指南(五) - 搬家 备份
  8. W3C发布DRM作为推荐方案
  9. 天梯——赌马 (20 分)
  10. 李阳疯狂英语900句 331-545
  11. 发那科机器人点位编辑_发那科机器人指令编辑大全
  12. 【Activity】Activity的启动模式:SingleTask
  13. 管理学五(手机的危害,积累与责任、见闻杂谈)
  14. 【Gem5】有关gem5模拟器的资料导航
  15. 毕业设计-基于JSP的网上购书系统.doc
  16. 百度,dingding 安装在ubuntu1604
  17. IEEE Access 上岸指南
  18. 计算机水平模拟软件卸载不了怎么办,有的软件卸载不了怎么办
  19. java读取excel总是有小数点的解决方案
  20. php制作报销系统,报销系统是如何实现全程费控-让企业费用支出更透明-更节省的?...

热门文章

  1. 写作之法 —— 如何切题与点题
  2. matlab 矢量化编程(四)—— 标量函数转化为能够处理矢量的函数
  3. 存储与主板的外设接口
  4. 线性方程组的求解(C++)
  5. 同一性(identical)
  6. 可变对象 vs 不可变对象(Python)
  7. 杜甫的《望岳》在哪里作的?山脚下还是山头上?
  8. Linux 内核的壳 —— shell
  9. 编程规范 —— 变量的命名
  10. Java char jdk_java学习系列之二---字符串(char.String.StringBuilder以及StringBuffer)