第 45 届国际大学生程序设计竞赛(ICPC)亚洲区域赛(济南)(重现赛)

  • 导语
  • 涉及的知识点
  • 题目
    • C
    • D
    • G
    • J
    • M
  • 参考文献

导语

日常的队内集训,开始的时候状态其实很好,但是到了后两题就出现了状况,其实完全可以至多错两发就过的,应该快接近铜牌水平了,希望能在今年济南站首次拿牌

链接:第 45 届国际大学生程序设计竞赛(ICPC)亚洲区域赛(济南)(重现赛)

涉及的知识点

思维,贪心,二分图,位运算

题目

C

题目大意:n堆石子,每堆石子最多有3个,现在将这n堆石子合并,每次选择两堆来合并,合并两堆的花销为(x%3)(y%3)(x\%3)(y\%3)(x%3)(y%3),求出最小花销

思路:和队友讨论得出结论后然后让队友写的,结论很简单,一开始个数为3的是不用考虑的,直接考虑个数为2和个数为1即可,将2和1对应组合,判断剩余的是2还是1,再根据对应的情况直接处理即可

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main() {ios::sync_with_stdio(0);cin.tie(0);ll a,b,c,res=0;cin >>a>>b>>c;res+=min(a,b)*2;if(a>b) {res+=(a-b)/3*3;if((a-b)%3==2)res++;} else {res+=(b-a)/3*6;if((b-a)%3==2)res+=4;}cout <<res;return 0;
}

D

题目大意:n个学生,wiw_iwi​为第i个学生写的论文字数,第i个学生有一个字数下限LiL_iLi​和一个字数上限RiR_iRi​,显然有Li≤wi≤RiL_i\le w_i\le R_iLi​≤wi​≤Ri​,对第i个学生,它的成绩是n−Kin-K_in−Ki​,KiK_iKi​是n个学生中满足wj>wiw_j\gt w_iwj​>wi​的j的数量,每个学生想要实现更高的分数,所以对他们最有利的情况下他们都会写到自己的上限,但显然,如果每个人写的字数都一样,所有人的成绩都是最高分,现在为了避免内卷,每个学生需要选择一个wiw_iwi​满足这两个条件:

  1. 对于每个学生,他/她的成绩不能比最初的计划低
  2. 最小化∑i=1nwi\sum_{i=1}^n w_i∑i=1n​wi​

思路:这题是队友写的,好像是因为读题的问题忽略了细节,结果犯了不该犯的错误,以后还是尽量自己来看一遍翻译
这里有一个很关键的一个地方,就是不能比最初的计划低,最初的计划是都取右端点,所以首先按照右边界排序获得最初计划的乘积,

#include <bits/stdc++.h>
#define ll long long
#define INF 0x3f3f3f3f
using namespace std;
const int N=1e5+5;
typedef pair<ll,ll>pr;
pr ran[N];
bool cmp(pr p1,pr p2) {if(p2.second > p1.second)return true;else if(p2.second == p1.second)return p2.first > p1.first;elsereturn false;
}
int main() {int n;scanf("%d",&n);for(int i = 1; i <= n; i++)scanf("%lld %lld",&ran[i].first,&ran[i].second);sort(ran+1,ran+1+n,cmp);ll res=0,tmp=0;for(int i=1; i<=n;) {ll rmax=ran[i].second,mark=ran[i].first,cnt=0;while(i<=n) {if(ran[i].second!=rmax)break;cnt++;mark=max(max(mark,ran[i].first),tmp);i++;}res+=(cnt*mark);tmp=mark;}printf("%lld\n",res);return 0;
}

G

题目大意:给出两个正整数X,Y(X>Y)X,Y(X>Y)X,Y(X>Y),每次操作X=XxorA(0≤A<X)X=XxorA(0\le A \lt X)X=XxorA(0≤A<X),现在要操作至多5次使得XXX变成YYY

思路:首先,XxorYxorX=YX xor Y xorX=YXxorYxorX=Y,那么理论上进行两次操作即可,如果XxorY>XXxorY>XXxorY>X,那么先算XxorYXxorYXxorY即可,否则就直接把XxorYXxorYXxorY的结果与XXX异或即可

#include <bits/stdc++.h>
#define ll long long
using namespace std;
int main() {ll X,Y;scanf("%lld%lld",&X,&Y);ll xy=X^Y;if(xy>X)printf("2\n%lld %lld",Y,X);elseprintf("1\n%lld",xy);return 0;
}

J

题目大意:有一个图构造器,输入一个整数序列a1…n(0≤a<260)a_{1\dots n}(0\le a\lt 2^{60})a1…n​(0≤a<260),输出一个有n个节点的无向图,当ax∣ay=260−1时,有a_x|a_y=2^{60}-1时,有ax​∣ay​=260−1时,有边(x,y)(x,y)(x,y)存在,现在给出一棵有n个节点的树,求出构造整棵树的序列

思路:训练的时候考虑的方向是对的,但是没有解决图中的极端情况,给定节点数很小,考虑按位来构造这棵树,因为是或运算,贪心的去想,尽量保证节点之间所取的位不同,那么,每个节点与相连节点至少有两位不同,道理很简单,如果只有一位不同的话,那么该节点的相连节点会全部相同,下一层就没办法推出了。如图,可以看到每隔一层的节点,它们的位上01的情况应该是大致相同的,不过是几位不同而已,这里就可以用二分图的思想把所有节点染色,再根据颜色少的节点来构造,其数量必定是小于等于50个的,假设红色的即为颜色少的节点颜色,构造方法如下(不止这一种):

  1. 第i个红点最高位置0,第i为0,其余为1,红点之间无边
  2. 蓝点最高位置1,与其相邻的红点对应编号为x,蓝点所有的x置1,其余为0,蓝点之间无边

#include <bits/stdc++.h>
using namespace std;
int n,cnt,head[1212],id[121];
long long a[121];
vector<int>vec[2];
struct node {int next,to;
} e[1212];
void Add(int from,int to) {e[++cnt].next=head[from];e[cnt].to=to;head[from]=cnt;
}
void dfs(int u,int fa,int col) {//染色vec[col].push_back(u);for(int i=head[u]; i; i=e[i].next) {int v=e[i].to;if(v!=fa)dfs(v,u,col^1);}
}
int main() {ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);cin >>n;for(int i=1; i<n; i++) {int u,v;cin >>u>>v;Add(u,v);Add(v,u);}dfs(1,0,0);if(vec[0].size()>vec[1].size())swap(vec[0],vec[1]);//确保以少的点为基础int len=vec[0].size();for(int i=0; i<len; i++) {//白点加上权值a[vec[0][i]]=(1ll<<60)-1-(1ll<<i)-(1ll<<59);id[vec[0][i]]=i;//标记}len=vec[1].size();for(int i=0; i<len; i++) {int u=vec[1][i];a[u]=(1ll<<59);//最高位设1for(int j=head[u]; j; j=e[j].next) {//根据邻接点加上缺的值int v=e[j].to;a[u]+=(1ll<<id[v]);}}for(int i=1; i<=n; i++)cout <<a[i]<<" ";return 0;
}

M

题目大意:一个锅,每次可以同时煎K张饼,每个饼正反面都要简,每次剪花费1h,求煎完所有n张的最小花费

思路:就是个找规律的题,思路很简单

#include <bits/stdc++.h>
using namespace std;
int main() {int n, k;scanf("%d%d",&n,&k);if(n<=k)printf("2\n");else if(2*n%k)printf("%d\n",2*n/k+1);elseprintf("%d\n",2*n/k);return 0;
}

参考文献

  1. 2020 ICPC济南站 J Tree Constructer 构造+二分图染色

第 45 届国际大学生程序设计竞赛(ICPC)亚洲区域赛(济南)(重现赛)相关推荐

  1. 第 45 届国际大学生程序设计竞赛(ICPC)亚洲区域赛(济南):签到题A Matrix Equation(高斯消元求线性异或方程组自由元个数)

    problem 给出两个n*n的01矩阵,A和B 定义两种运算,Z(i,j)=Xi行*Yj列相加%2,D(i,j)=X(i,j)*Y(i,j) 求最多有多少个可能的矩阵C,满足A运算1C==B运算2C ...

  2. 第45届国际大学生程序设计竞赛(ICPC)银川站太原理工大学收获4枚奖牌

    第45届国际大学生程序设计竞赛(ICPC)银川站,由宁夏理工学院承办,于2021年5月15-16日在宁夏的石嘴山市进行. 太原理工大学在比赛中获得2银2铜共4枚奖牌的好成绩. 参加本次比赛的四个队,涵 ...

  3. 第45届国际大学生程序设计竞赛(ICPC)沈阳站太原理工大学收获1枚铜牌

    第45届ICPC沈阳区域赛,于2021年7月18日在东北大学南湖校区举行.太原理工大学2个队参加比赛,由20级中学没有学过编程的3名同学组成的队,首次参加现场赛并获得铜奖.

  4. 第 45 届国际大学生程序设计竞赛(ICPC)亚洲区域赛(南京)签到题K Co-prime Permutation,L Let‘s Play Curling

    序 emmm因为没时间补题(虽然签到有四题),所以只能先放两个签到. 这是比赛链接:https://ac.nowcoder.com/acm/contest/10272 这是题解链接:2020年ICPC ...

  5. 第 45 届国际大学生程序设计竞赛(ICPC)亚洲网上区域赛模拟赛 题解(除了C、G之后补)

    整理的算法模板合集: ACM模板 这次比赛好多原题呀-(就是那种稍微拓展了一点的原题) 目录 A.Easy Equation B.XTL's Chessboard D.Pokemon Ultra Su ...

  6. 第 45 届国际大学生程序设计竞赛(ICPC)亚洲区域赛(昆明),签到题HIL

    H. Hard Calculation 链接:https://ac.nowcoder.com/acm/contest/12548/H 来源:牛客网 题目描述 Hooray! It is the fir ...

  7. 第 45 届国际大学生程序设计竞赛(ICPC)亚洲网上区域赛模拟赛 B.XTL‘s Chessboard(思维)

    题目链接:https://ac.nowcoder.com/acm/contest/8688/B 题目描述 Xutianli is a perfectionist, who only owns &quo ...

  8. 第 45 届国际大学生程序设计竞赛(ICPC)亚洲区域赛(昆明),签到题4题

    文章目录 H. Hard Calculation I. Mr. Main and Windmills L. Simone and graph coloring J.Parallel Sort 补题链接 ...

  9. 【第 45 届国际大学生程序设计竞赛(ICPC)亚洲区域赛】Simone and Graph Coloring

    #include <bits/stdc++.h> using namespace std; const int maxn = 1000005, INF = 0x7f7f7f7f; int ...

最新文章

  1. php银盾算法,盾灵商品推广系统
  2. oracle视图能用etl工具_(转)使用kettle作为sqlserver2008和oracle10G之间的ETL工具
  3. Pytorch Merge操作
  4. 7、GRANT:用户授权
  5. python选取tensor某一维_Pytorch的Tensor操作(1)
  6. 【AI视野·今日CV 计算机视觉论文速览 第191期】Wed, 5 May 2021
  7. 计算机与特殊教育,计算机与信息工程学院特殊教育学院支教活动举行
  8. 如何解密网易ncm/qq音乐的qmcflac/酷狗kgm等加密格式转换成MP3
  9. 最全最简单的dubbo教程-开篇《一》
  10. CodeSmith使用心得
  11. 大学计算机专业大二学业总结,大学生大二学年总结
  12. 【期货交易】期货持仓量浅析,持仓是什么?
  13. 计算机系统系统时间不准,windows7系统时间不对怎么办_windows7系统时间不准如何恢复-win7之家...
  14. 【Android安全】Google Hardware-backed Keystore | SafetyNet | 远程证明Remote Attestation
  15. win10 通过命令打开画图工具
  16. Google谷歌未来如何占领“Web3高地”?
  17. STM32MP157C-DK2->Develop on Arm® Cortex®-A7之 C语言开发LED例程
  18. Mac卸载jdk和java
  19. Java并发编程实战--FutureTask
  20. Android利用SVG实现动画效果

热门文章

  1. 云平台车载终端开发项目日志
  2. 打开Vi编辑器出现E325: ATTENTION的解决方法
  3. pickle.load()和pickle.dump()
  4. [python] say hi
  5. 访问需要排队,奇葩网站有木有?
  6. Android 桌面工具,安卓怎样添加桌面工具
  7. bt种子自动发布 linux,Linux制作BT种子并获取BT种子信息
  8. 关注疫情调查实践报告
  9. CCNP-IGP综合:多域多协议修改AD和Rou-map标签的区别
  10. 《Flutter 控件大全》第八个:AnimatedCrossFade