首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

【AcWing周赛】AcWing第85场周赛

  • 24-03-17 20:56
  • 2217
  • 6835
blog.csdn.net

目录

<一>Acwing 4791. 死或生

一、题目

1、原题链接

2、题目描述

二、解题报告

1、思路分析

2、时间复杂度

3、代码详解 

 <二>Acwing 4792. 最大价值

一、题目

1、原题链接

2、题目描述

二、解题报告:

1、思路分析

2、时间复杂度

3、代码详解 

<三>Acwing 4793. 危险程度

一、题目

1、原题链接

2、题目描述

二、解题报告

1、思路分析

2、时间复杂度

3、代码详解 

<四> 知识风暴

1、排序不等式

2、贪心法

3、数据范围

4、并查集

基本操作


<一>Acwing 4791. 死或生

一、题目

1、原题链接

4791. 死或生 - AcWing题库

2、题目描述

某国正在以投票的方式决定 2 名死刑犯(编号 1∼2)的生死。

共有 n组人员(编号 1∼n)参与投票,每组 10 人。

每组成员只参与一名死刑犯的投票,其中第 i 组人员的投票对象是死刑犯 ti,其中 xi人认为他无罪,yi 人认为他有罪。

在所有人员投票结束后,将对投票结果进行统计。

对于每名死刑犯,如果投他无罪的总票数大于或等于投他有罪的总票数,则他得以生还,否则他将被处死。

请你判断每名死刑犯的生死。

输入格式

第一行包含一个整数 n。

接下来 n 行,每行包含三个整数 ti,xi,yi。

保证两名犯人都会被投票。

输出格式

如果第一位死刑犯生还,则在第一行输出 LIVE,否则在第一行输出 DEAD。

如果第二位死刑犯生还,则在第二行输出 LIVE,否则在第二行输出 DEAD。

数据范围

前 3 个测试点满足 2≤n≤10。
所有测试点满足 2≤n≤1000,1≤ti≤2,0≤xi,yi≤10,xi+yi=10。

输入样例1:

  1. 2
  2. 1 5 5
  3. 2 6 4

输出样例1:

  1. LIVE
  2. LIVE

输入样例2:

  1. 3
  2. 1 0 10
  3. 2 0 10
  4. 1 10 0

输出样例2:

  1. LIVE
  2. DEAD

二、解题报告

1、思路分析

1)根据题意直接模拟,根据输入的t,来依次统计两名死刑犯的有罪和无罪票数。

2)对投票结果进行判断,针对每名死刑犯输出对应的结果。

2、时间复杂度

时间复杂度为O(n)

3、代码详解 

  1. #include
  2. using namespace std;
  3. int main()
  4. { int n;
  5. cin>>n;
  6. int t,x,y;
  7. int sumx1=0,sumx2=0;
  8. int sumy1=0,sumy2=0;
  9. for(int i=0;i
  10. cin>>t>>x>>y;
  11. if(t==1){
  12. sumx1+=x;
  13. sumy1+=y;
  14. }
  15. if(t==2){
  16. sumx2+=x;
  17. sumy2+=y;
  18. }
  19. }
  20. if(sumx1
  21. cout<<"DEAD"<
  22. }
  23. else{
  24. cout<<"LIVE"<
  25. }
  26. if(sumx2
  27. cout<<"DEAD";
  28. }
  29. else{
  30. cout<<"LIVE";
  31. }
  32. return 0;
  33. }

 <二>Acwing 4792. 最大价值

一、题目

1、原题链接

4792. 最大价值 - AcWing题库

2、题目描述

已知,小写字母 a∼z的价值分别为 wa,wb,…,wz。

对于一个由小写字母构成的长度为 l 的字符串 S=s1s2…sl,其价值为 ws1×1+ws2×2+…+wsl×l。

现在,给定一个由小写字母构成的字符串 S,请你在这个字符串中插入 k 个小写字母,要求最终得到的字符串的价值尽可能大。

注意:

  • 插入的位置可以随意选。
  • 插入的字母也可以随意选,可以插入不同字母。

输出最大可能价值。

输入格式

第一行包含一个字符串 S。

第二行包含一个整数 k。

第三行包含 26 个整数 wa,wb,…,wz。

输出格式

一个整数,表示最大可能价值。

数据范围

前 3 个测试点满足,S的长度范围 [1,5]。
所有测试点满足,SS 的长度范围 [1,1000],0≤k≤10^3,wa∼wz 的取值范围 [0,1000]。

输入样例:

  1. abc
  2. 3
  3. 1 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

输出样例:

41

二、解题报告:

思路来源:AcWing 4792. 最大价值(AcWing杯 - 周赛) - AcWing

y总yyds

1、思路分析

1)首先,我们要确定插入的字母为哪一个,根据对问题的简单分析,如果我们插入的不是价值最大的,一定不是最优解,所以我们必须插入价值最大的字母。

2)其次,我们要确定插入的位置是哪里?由1)可知我们插入的需要是价值最大的字母,所以,每次插入字母的价值是相同的而且是最大的,我们又可以知道,插入的位置有,字符串前k个位置,字符串每个字母间的位置,还有字符串后k个位置,而这些位置的l(与价值相乘的那个数)是依次增大的,由排序不等式的知识可知,两数列“顺序”相乘和最大,因为可插入位置的l是有序的,所以我们要保证插入的字母的位置的l与原字符串字母的位置的l,尽可能有序,如果我们把字母连续插入,或者说是一起插入到最后,我们就可以保证字符串的最后k个位置的l至少是有序的,而且这至少的k个数的位置l的值也是最大的,而插入字母的价值又是相等的,所以我们只需要让最大的l,次大的l,...依次来乘插入字母的价值,插入字母的总价值一定是最大的。综上,我们需要把字母全部插在字符串的后k个位置,也就是说,需要把插入的字母拼接在字符串后,这样得到的插入字母的总价值最大,同时,也能保证字符串总价值最大。

3)最后,我们模拟上述过程:先找出价值最大的字母,然后将k个该字母全部插到字符串后面,计算原字符串价值和插入字母的价值,最后相加得到字符串最大可能价值,输出即可。

2、时间复杂度

时间复杂度为O(n)

3、代码详解 

  1. #include
  2. #include
  3. using namespace std;
  4. int w[26];
  5. int main()
  6. { string s;
  7. cin>>s;
  8. int ans=0;
  9. int k;
  10. cin>>k;
  11. int max=0;
  12. for(int i=0;i<26;i++){
  13. cin>>w[i];
  14. if(w[i]>max){
  15. max=w[i];
  16. }
  17. }
  18. int ls=s.size();
  19. for(int i=0;i
  20. ans+=w[s[i]-'a']*(i+1);
  21. }
  22. for(int i=ls;i
  23. ans+=max*(i+1);
  24. }
  25. cout<
  26. return 0;
  27. }

<三>Acwing 4793. 危险程度

一、题目

1、原题链接

4793. 危险程度 - AcWing题库

2、题目描述

有 n 种化学物质,编号 1∼n。

其中,有 m对物质之间会发生反应。

现在,要将这些化学物质逐个倒入同一个试管之中,具体倒入顺序不限。

我们需要计算一下试管的危险值。

已知,空试管的危险值为 1,每倒入一种化学物质,如果该物质能够与之前倒入试管中的一种或多种物质发生反应,则试管的危险值将乘以 2。

请你计算并输出,通过合理安排所有化学物质的倒入顺序,能够得到的试管的最大危险值。

输入格式

第一行包含两个整数 n,m。

接下来 m行,每行包含两个整数 x,y,表示化学物质 x 和化学物质 y 之间会发生反应。保证同一对化学物质在输入中最多出现一次。

输出格式

一个整数,表示最大危险值。

数据范围

前 4 个测试点满足 1≤n≤10。
所有测试点满足 1≤n≤50,0≤m≤n(n−1)/2,1≤x

输入样例1:

1 0

输出样例1:

1

输入样例2:

  1. 2 1
  2. 1 2

输出样例2:

2

输入样例3:

  1. 3 2
  2. 1 2
  3. 2 3

输出样例3:

4

二、解题报告

思路来源:AcWing 4793. 危险程度(AcWing杯 - 周赛) - AcWing

y总yyds

1、思路分析

1)我们可以利用贪心的思想,尽量使每次加入的物质都能与试管中的物质反应。

2)我们将可以反应的物质看成一个连通块,所以不同的连通块中的物质之间是不能反应的,分析可知,如果有k个物质是可以相互反应的,我们加入这k个物质后危险值最大乘2^(k-1)。我们可以一个连通块,一个连通块地加入,也就是说把可以把一组可以互相反应的物质加入试管,然后再加另一组,这样可以保证除了每组第一种物质加入不反应,其他都要反应,如果假设总共的连通块的数量为q,也就是要反应2^(n-q)次,也就是说危险值要乘2^(n-q),此时危险值为最大。

3)模拟上述过程:利用并查集,将能相互反应的物质组成一个连通块,记录连通块的个数,最后利用2^(n-连通块数)求出最大危险值,输出即可。

2、时间复杂度

时间复杂度为O(n)

3、代码详解 

  1. #include
  2. #include
  3. using namespace std;
  4. int s[55];
  5. void init(int num){
  6. for(int i=0;i
  7. s[i]=i;
  8. }
  9. }
  10. int find(int w){
  11. if(s[w]==w){
  12. return w;
  13. }
  14. else{
  15. s[w]=find(s[w]);
  16. return s[w];
  17. }
  18. }
  19. int main()
  20. { int n,m;
  21. cin>>n>>m;
  22. init(n);
  23. int x,y;
  24. int cnt=n;//初始没有边,连通块数量为n
  25. for(int i=0;i
  26. cin>>x>>y;
  27. x=find(x),y=find(y);
  28. //如果x和y能反应,而且x,y的祖宗节点不同,合并x,y,连通块数量减1
  29. if(x!=y){
  30. s[x]=y;
  31. cnt--;
  32. }
  33. }
  34. long long ans=1; //根据数据范围可知,ans为2^49超int,用long long类型
  35. for(int i=0;i
  36. ans*=2;
  37. }
  38. cout<
  39. return 0;
  40. }

<四> 知识风暴

1、排序不等式

内容:两个等长数列每项相乘再相加的和,“顺序”相乘(大数乘大数、次大乘次大、直到最小乘最小)该和最大,“逆序”相乘(最大乘最小、次大乘次小、...)该和最小,其他情况位于两者之间。

2、贪心法

贪心法用于解决最优化问题,这类问题有两种性质:

1)最优子结构:当一个问题的最优解包含其子问题的最优解时,称此问题具有最优子结构。

2)贪心选择性质:指问题的整体最优解可以通过一系列局部最优的选择,即贪心选择来得到。

3、数据范围

1)short:[-2^15,2^15-1]

2)int:[-2^31,2^31-1]

3)long:[-2^31,2^31-1](32位编译器)/ [-2^63,2^63-1](64位编译器)

4)long long:[-2^63,2^63-1]

(注:数据超过10^9左右,使用long long类型,不能继续使用int类型)

4、并查集

并查集主要用于处理一些不相交集合的合并问题

基本操作

初始化

  1. int f[10001];
  2. void init(int N){
  3. for(int i=0;i
  4. f[i]=i;
  5. }
  6. }

查找

  1. int find(int x){
  2. if(f[x]==x){
  3. return x;
  4. }
  5. f[x]=find(f[x]);
  6. return f[x];
  7. }

合并

  1. void un(int x,int y){
  2. int xf=find(x);
  3. int yf=find(y);
  4. f[xf]=yf;
  5. }
注:本文转载自blog.csdn.net的负重奋进,笃行求实的文章"https://blog.csdn.net/dzk666123/article/details/128603905"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top