24暑期第七次训练C组

news/2024/11/13 12:24:38/文章来源:https://www.cnblogs.com/zerocloud01/p/18299586

目录
  • A
  • B
  • C
  • D
  • E
  • F
  • G
  • H
  • I
  • J

A

生活大爆炸版石头剪刀布
纯模拟,保证AB之间能对应就行。
给出较朴素做法。

bool caiquan(int,int);int main(void)
{int n,x,y,ans1 = 0,ans2 = 0,stp;cin >> n >> x >> y;vector<int> a(x);vector<int> b(y);for(auto &i : a)	cin >> i;for(auto &i : b)	cin >> i;for(int i=0,j=0,t=0;t < n;t++){ans1 += caiquan(a[i],b[j]);ans2 += caiquan(b[j],a[i]);++i,++j;if(i == x)	i = 0;if(j == y)	j = 0;}cout << ans1 << ' ' << ans2 << '\n';
}bool caiquan(int a,int b)
{bool ans = false;if(a == 0){if(b == 2 || b == 3)	ans = true;}else if(a == 1){if(b == 0 || b == 3)	ans = true;}else if(a == 2){if(b == 1 || b == 4)	ans = true;}else if(a == 3){if(b == 2 || b == 4)	ans = true;}else{if(b == 0 || b == 1)	ans = true;}return ans;
}

B

笨小猴
模拟,可以开map模拟,但是只出现字符,开数字模拟也可,甚至更快。

void func()
{string st;cin >> st;map<char,int> cnt;for(auto &i : st)	cnt[i]++;int mx = 0, mn = 0x3f3f;for(auto &i : cnt){mx = max(mx,i.second);mn = min(mn,i.second);}if(slove(mx - mn))	cout << "Lucky Word\n" << mx - mn << '\n';else	cout << "No Answer\n0";
}bool slove(int z)// 判素数
{if(z <= 1)	return false;for(int i=2;i<=z/i;++i){if(z % i == 0)	return false;}return true;
}

C

过河卒
超纲题,二维dp。

根据题意,卒只能王下或者往右移动,所以$[i,j]$状态由$[i-1,j]$和$[i,j-1]$转移。
设$dp[i][j]$为移动到$(i,j)$的次数,那么可得转移方程:
$dp[i][j] = dp[i-1][j] + dp[i][j-1]$
但是因为马的存在,有部分点不可移动,这时只需要单独处理,到此处时$dp[i][j] = 0$即可。

因为想着最后一组题,特意出了点超纲的考算法的题目。其实可能也不超纲,你们专业课好像学了动态规划。

void func()
{int n,m,a,b;cin >> n >> m >> a >> b;int dp[N][N];int vis[N][N];n += 2,m += 2,a += 2,b += 2;// 保证边界往外一格存在,防REmemset(vis,0,sizeof vis);memset(dp,0,sizeof dp);int dx[] = {1,2,2,1,-1,-2,-2,-1};int dy[] = {2,1,-1,-2,-2,-1,1,2};// 表示马的移动dp[1][2] = 1;vis[a][b] = 1;for(int i=0;i<8;++i)	vis[a+dx[i]][b+dy[i]] = 1;// 计算马禁止的坐标for(int i=2;i<=n;++i){for(int j=2;j<=m;++j){dp[i][j] = dp[i-1][j] + dp[i][j-1];if(vis[i][j] == 1)	dp[i][j] = 0;}}cout << dp[n][m] << '\n';
}

D

Contest Proposal
因为数据很小,可以写暴力一点。
每次比较$a_i,b_i$,$a_i$不符合条件删去,然后把$b_i$放入,再给$a$排序。这样就能保证顺序了。这时复杂度$O(n^2logn)$。

void func()
{int n,ans = 0;cin >> n;vector<int> a(n),b(n);for(auto &i : a)	cin >> i;for(auto &i : b)	cin >> i;for(int i=0;i<n;++i){if(b[i] < a[i]){a.pop_back();a.push_back(b[i]);sort(a.begin(),a.end());ans ++;}}cout << ans << '\n';
}

实际可以用更短的代码写出$O(n)$的解法。
因为在$a_i > b_i$后插入了新数字,这个数字大小一定在$a_{i-1}$和$a_i$之间,所以和$b_{i+1}$比较的还是$a_i$。具体如下。

void func()
{int n,ans = 0;cin >> n;vector<int> a(n),b(n);for(auto &i : a)	cin >> i;for(auto &i : b)	cin >> i;for(int i=0,j=0;j<n;++j){if(a[i] <= b[j])	++i;else	ans++;}cout << ans << '\n';
}

E

Coin Games
每个人操作实际只有以下三种情况。

分别使实际可操作次数$+2,-2,$不变。在边界操作不翻转,可理解成第三种情况。每次操作都使得可操作次数$-1$后偶数次变化,都不影响结果。因为答案就是可操作次数的奇偶性。

void func()
{int n;string st;cin >> n >> st;int cnt = 0;for(int i=0;i<n;++i)if(st[i] == 'U')	cnt++;if(cnt % 2)	cout << "YES\n";else	cout << "NO\n";
}

F

Phone Desktop
每个屏幕$3 \times 5$,可放$2$个$2 \times 2$,其余可填$7$个$1 \times 1$先算$2 \times 2$需要多少个屏幕,再算当前屏幕是否可放下所有$1 \times 1$,根据$1 \times 1$的量加屏幕。

void func()
{int a,b;cin >> a >> b;int ans = (b+1) / 2;int stp = a - (ans*15 - 4*b);if(stp > 0)	ans += (stp + 14) / 15;//当前屏幕是否可以放下所有a,不能则再加屏幕. cout << ans << '\n';
}

G

Chess For Three
因为每次对弈都使总分$+2$,所以总分不是偶数则不可能。
又因为求最大可能和棋次数。那么先考虑全和棋的情况。
全和棋和棋数为得分$/2$,因为$c$得分最高,所以参与了最多次的对弈。
考虑极限情况,所有对弈都有$c$参与。可得:

  • 在$a + b = c$ 时,$a,b$可以全向$c$和棋。答案即为总分$/2$。

进而可推得:

  • 在$a + b < c$ 时,全和棋不满足答案,$a,b$全向$c$和棋,$c$再赢若干次。和棋次最多。答案即$(a+b) / 2$
  • 在$a + b > c$ 时,全和棋是满足答案的。答案即为总分$/2$。
void func()
{int a,b,c;cin >> a >> b >> c;int sum = 0;sum = a + b + c;if(sum % 2 == 0)	cout << (a + b >= c ? sum / 2 : a + b) << '\n';else	cout << -1 << '\n';
}

H

Symmetric Encoding
按题意处理出$r$串,使得对称映射就行。

void func()
{int n;string st,r;cin >> n >> st;r = st;sort(r.begin(),r.end());r.erase(unique(r.begin(),r.end()),r.end());int len = r.size();map<char,char> mp;for(int i=0;i<len;++i)	mp[r[i]] = r[len - 1 - i];for(int i=0;i<n;++i)	st[i] = mp[st[i]];cout << st << '\n';
}

I

Little Nikita
设放上的操作有$x$次,拿下的操作有$y$次,那么可得

  • $x = y = n $
  • $x - y = m $

那么$n + m = 2 \times x$,$n + m$为偶数。

void func()
{int n,m;cin >> n >> m;if((n + m) % 2 == 0 && n >= m)	cout << "YES\n";else	cout << "NO\n";
}

J

Update Queries
题意说明:可以将$s$按$ind$数组的索引替换为$b$中对应字符。对$ind$和$b$排序,使得结果字符串的字典序最小。
因为并不需要输出排列后的$ind$和$b$,所以只需要输出最小字典序的答案即可,二者排序并不重要。
只需要将$ind$代表的可替换位置,从前到后替换为$b$中从小到大的字符。

void func()
{int n,m;cin >> n >> m;string s,c;cin >> s;set<int> ind;while(m--){int stp;cin >> stp;ind.insert(stp);}cin >> c;sort(c.begin(),c.end());int j=0;for(auto &i : ind)	s[i-1] = c[j++];cout << s << '\n';
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/742831.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

4-电子商务物理与供应链管理

4.1 电子商务与物流 4.1.1 物流及物流标准化 1.物流的概念 根据我国国家标准在GB/T18345—2006《物流术语》中的表述,物流(Logistics):“物品从供应地向接受地的实体流动过程。根据实际需要,将运输、储存、配送、包装、装卸搬运、流通加工、信息管理等基本功能实施有机结合…

比赛获奖的武林秘籍:06 5分钟速通比赛路演答辩,国奖选手的血泪经验!

本文主要介绍了大学生电子计算机类比赛和创新创业类比赛常见雷点、要点和精髓,并对路演的定义和基本概念进行了说明,结合自身经历对路演答辩常见技巧和评委问题进行了总结。比赛获奖的武林秘籍:06 5 分钟速通比赛路演答辩,国奖选手的血泪经验! 摘要 本文主要介绍了大学生电…

汽车虚拟仿真vr技术的三个关键方面!

汽车作为人类生活中不可或缺的交通工具,同时也是展示个性和品味的重要象征。随着科技的迅猛发展和消费者需求的不断升级,汽车行业正处于持续创新和变革之中,在这个过程中汽车虚拟仿真VR看车技术正扮演着至关重要的角色,接下来,我们将逐一深入探讨汽车虚拟仿真VR技术的三个…

点评一下新手画的电路图

目的 实现5v升压到12v 原理图pcb问题 这是一个简单的直接抄的LT1930的电路,想知道能够如何改进,还有我想做一个防止这玩意gnd和12v插反导致板子直接寄,如何处理,之后会自己学会如何真正看懂这个图,目前大一刚结束还没学习数模电。

通达OA,远程命令执行漏洞复现

一、漏洞描述 通达OA是由北京通达信科科技有限公司开发的一款办公系统,前一段时间通达官方在其官网发布了安全提醒与更新程序,并披露有用户遭到攻击。攻击者可在未授权的情况下可上传图片木马文件,之后通过精心构造的请求进行文件包含,实现远程命令执行,且攻击者无须登陆认…

通达OA,远程命令执行漏洞的 利用复现(Exp-tools,getshell)

一、漏洞描述 通达OA是由北京通达信科科技有限公司开发的一款办公系统,前一段时间通达官方在其官网发布了安全提醒与更新程序,并披露有用户遭到攻击。攻击者可在未授权的情况下可上传图片木马文件,之后通过精心构造的请求进行文件包含,实现远程命令执行,且攻击者无须登陆认…

【考研数学】大部分真题解析只说了这道考研数学真题为什么选B,却不说其他选项为什么不对

今天要给大家分享的笔记是:《2022考研数二第03题解析》—— 市面上不少真题解析都只说了这道题目为什么选 B,但是,这些真题是用来练习的,我们不能只知道什么对,还要知道什么不对,这样才能对考研真题有更加深入的理解,才更有可能在考场上做题时游刃有余。 所以,跟「荒原…

通达OA远程命令执行漏洞利用复现(Exp-tools,getshell)

一、漏洞描述 通达OA是由北京通达信科科技有限公司开发的一款办公系统,前一段时间通达官方在其官网发布了安全提醒与更新程序,并披露有用户遭到攻击。攻击者可在未授权的情况下可上传图片木马文件,之后通过精心构造的请求进行文件包含,实现远程命令执行,且攻击者无须登陆认…

使用spring-webmvc6实现文件上传

使用SpringMVC6版本,不需要添加以下依赖:<dependency><groupId>commons-fileupload</groupId><artifactId>commons-fileupload</artifactId><version>1.5</version> </dependency>新建maven模块springmvc-009,pom.xml<?…

基于ACO蚁群优化算法的WSN网络路由优化matlab仿真

1.程序功能描述基于ACO蚁群优化算法的WSN网络路由优化,通过蚁群优化迭代,在WSN中搜索一个最短的路由路径。在仿真过程中,实时显示每一次迭代过程中找到的路径,最后输出ACO的优化迭代过程,网络路由路径的搜索结果。2.测试软件版本以及运行结果展示 MATLAB2022a版本运行 3.…

南外c++集训枚举题:关灯

根据标题可知 这道题一定是一道枚举题 这道题考虑使用dfs,处理特殊处理第一层,每次加答案时选最优值。 给出代码:点击查看代码 #include<bits/stdc++.h> using namespace std; int n,m; char mat[20][110]; int dfs(int cnt,int pos,int tmp)//cnt:楼层pos:哪里的楼梯…