备战蓝桥杯 Day3

目录

搜索与回溯

1222:放苹果

1221:分成互质组

1218:取石子游戏

数组 

 1126:矩阵转置

1127:图像旋转

 1128:图像模糊处理

1120:同行列对角线的格

string 

2046:【例5.15】替换字母

 2047:【例5.16】过滤空格

2048:【例5.18】串排序

string版本

map版本 

2049:【例5.19】字符串判等

2050:【例5.20】字串包含

1839:【05NOIP提高组】谁拿了最多奖学金(用例只通过30%)

1839:【05NOIP提高组】谁拿了最多奖学金


搜索与回溯

1222:放苹果

【题目描述】

把M�个同样的苹果放在N�个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K�表示)5,1,11,5,1 是同一种分法。

【输入】

第一行是测试数据的数目t�(0≤t≤200≤�≤20)。以下每行均包含二个整数M�和N�,以空格分开。1≤M,N≤101≤�,�≤10。

【输出】

对输入的每组数据M�和N�,用一行输出相应的K。

【输入样例】

1
7 3

【输出样例】

8
#include<iostream>
using namespace std;
const int N = 1e5 + 10;
int t, n, m;
int cnt[N];
int ans = 0;
//搜索状态为s,  s代表当前已经搜索的答案的累加和
void dfs(int s, int depth) {//5.终止条件if (s > n) return;if (depth <= m + 1 && s == n) {//n选r问题更改条件处ans++;return;}//1.枚举方案(枚举的时候直接排列变组合)for (int i = cnt[depth - 1]; i <= n; i++) {//2.本题需要重复搜索,则不需要加标记,故第二步略//3.搜索cnt[depth] = i;dfs(s + i, depth + 1);//4.回溯,若s作为状态传入dfs,则回溯的时候,s自动还原}
}
int main() {cin >> t;while (t--) {cin >> n >> m;cnt[0] = 1;ans = 0;//多组数据,相关状态初始化dfs(0, 1);//初始状态cout << ans << endl;}return 0;
}

1221:分成互质组

【题目描述】

给定n个正整数,将它们分组,使得每组中任意两个数互质。至少要分成多少个组?

【输入】

第一行是一个正整数n。1 ≤ n ≤ 10。

第二行是n个不大于10000的正整数。

【输出】

一个正整数,即最少需要的组数。

【输入样例】

6
14 20 33 117 143 175

【输出样例】

3

 本题需掌握的知识点:
1.互质的两个数a,b满足gcd(a,b)=1
2.若a,b,c互质,则c与a*b互质,反之也成立

#include<iostream>
using namespace std;
const int N = 1e4 + 10;
int n, a[N];
int gcd(int a, int b) {return b == 0 ? a : gcd(b, a % b);
}
int main() {cin >> n;for (int i = 1; i <= n; i++) {cin >> a[i];}for (int i = 1; i <= n; i++) {//清零的位置不需要考虑for (int j = i + 1; j <= n; j++) {if (a[i] != 0 && gcd(a[i], a[j]) == 1) {a[i] *= a[j];a[j] = 0;}}}int cnt = 0;for (int i = 1; i <= n; i++) if (a[i] != 0) cnt++;cout << cnt << endl;return 0;
}

1218:取石子游戏

【题目描述】

有两堆石子,两个人轮流去取。每次取的时候,只能从较多的那堆石子里取,并且取的数目必须是较少的那堆石子数目的整数倍,最后谁能够把一堆石子取空谁就算赢。

比如初始的时候两堆石子的数目是25和7。

25 7-->11 7-->4 7-->4 3-->1 3-->1 0
选手1取选手2取选手1取选手2取选手1取

最后选手1(先取的)获胜,在取的过程中选手2都只有唯一的一种取法。

给定初始时石子的数目,如果两个人都采取最优策略,请问先手能否获胜。

【输入】

输入包含多数数据。每组数据一行,包含两个正整数a和b,表示初始时石子的数目。

输入以两个0表示结束。

【输出】

如果先手胜,输出"win",否则输出"lose"。

【输入样例】

34 12
15 24
0 0

【输出样例】

win
lose

【提示】

假设石子数目为(a,b)且a >= b,如果[a/b] >= 2则先手必胜,如果[a/b]<2,那么先手只有唯一的一种取法。[a/b]表示a除以b取整后的值。

#include<iostream>
using namespace std;
//搜索状态为a,b代表两堆石子的数量
bool dfs(int a, int b) {if (a < b) swap(a, b);if (a % b == 0) return true;//某一方赢了//枚举b的倍数i,但是要保证i*b不超过afor (int i = a / b; i >= 1; i--) //枚举所有取法,但凡能找到一种让对方输的情况,那么当前选手都会赢if (dfs(a - i * b, b) == false) return true;return false;//枚举所有取法,都没找到一种让对方输的情况,那么当前选手输
}
//选手1执行dfs(7,3)=true    dfs(1,3)=true   dfs(4,3)=false    
//选手2执行dfs(4,3)=false   dfs(1,3)=true
//选手1执行dfs(1,3)赢了
//选手2执行dfs(1,3)赢了
int main() {int a, b;while (cin >> a >> b && a && b) {if (dfs(a, b) == true) cout << "win" << endl;else cout << "lose" << endl;}return 0;
}

数组 

 信息学奥赛一本通(C++版)在线评测系统

 1126:矩阵转置

#include<iostream>
using namespace std;
const int N = 1e2 + 10;
int a[N][N];
int main()
{int n, m;cin >> n >> m;for (int i = 1; i <= n; i++)for (int j = 1; j <= m; j++)cin >> a[i][j];for (int i = 1; i <= m; i++){for (int j = 1; j <= n; j++)cout << a[j][i] << " ";cout << endl;}return 0;
}

1127:图像旋转

#include<iostream>
using namespace std;
const int N = 1e2 + 10;
int a[N][N];
int n, m;
int main()
{cin >> n >> m;for (int i = 1; i <= n; ++i)for (int j = 1; j <= m; ++j)cin >> a[i][j];for (int j = 1; j <= m; ++j)//遍历矩阵b,m行n列{for (int i = n; i >= 1; --i)cout << a[i][j] << ' ';cout << endl;}return 0;
}

 1128:图像模糊处理

#include<iostream>
#include<cmath>
using namespace std;
const int N = 1e2 + 10;
int a[N][N],b[N][N];
int n, m;
int s;//上下左右以及该点的平均值
int main()
{cin >> n >> m;for (int i = 1; i <= n; ++i)for (int j = 1; j <= m; ++j)cin >> a[i][j];for (int i = 1; i <= n; ++i){for (int j = 1; j <= m; ++j){if (!(i == 1 || i == n || j == 1 || j == m)){s = a[i][j] + a[i - 1][j] + a[i + 1][j] + a[i][j - 1] + a[i][j + 1];s = round((double)s / 5);b[i][j] = s;}elseb[i][j] = a[i][j];}}for (int i = 1; i <= n; ++i){for (int j = 1; j <= m; ++j)cout << b[i][j] << " ";cout << endl;}return 0;
}

1120:同行列对角线的格

#include<iostream>
#include<cmath>
using namespace std;
const int N = 1e2 + 10;
int a[N][N],b[N][N];
int n, x,y;
int main()
{cin >> n >> x>>y;for (int j = 1; j <= n; ++j)printf("(%d,%d) ", x, j);putchar('\n');for (int i = 1; i <= n; ++i)printf("(%d,%d) ", i, y);putchar('\n');for (int i = 1; i <= n; ++i)for (int j = 1; j <= n; ++j)if (i - j == x - y)printf("(%d,%d) ", i, j);putchar('\n');for (int i = n; i >= 1; --i)for (int j = 1; j <= n; ++j)if (i + j == x + y)printf("(%d,%d) ", i, j);putchar('\n');return 0;
}

string 

2046:【例5.15】替换字母

#include<iostream>
#include<string>
using namespace std;
string s;
char a, b;
int main()
{getline(cin, s);cin >>a>>b;for (auto &c : s)if (c == a)c =b;cout << s;return 0;
}

2047:【例5.16】过滤空格

#include<iostream>
#include<string>
using namespace std;
string s;
char a, b;
int main()
{getline(cin, s);cin >>a>>b;for (auto &c : s)if (c == a)c =b;cout << s;return 0;
}

 2047:【例5.16】过滤空格

#include<iostream>
#include<string>
using namespace std;
string s;
int main()
{while(cin>>s)cout << s<<" ";return 0;
}

2048:【例5.18】串排序

string版本
#include<iostream>
#include<string>
#include<map>
#include<algorithm>
using namespace std;
string s;
int main()
{int n; cin >> n;string s[25];for (int i = 1; i <= n; i++){cin >> s[i];}sort(s + 1, s + 1 + n);for (int i = 1; i <= n;i++) {cout << s[i] << endl;}return 0;
}
map版本 
#include<iostream>
#include<string>
#include<map>
using namespace std;
string s;
int main()
{map<string, int>mp;int n; cin >> n;for (int i = 1; i <= n; i++){cin >> s;mp.insert({ s,i });}for (auto it : mp) {cout << it.first << endl;}return 0;
}

2049:【例5.19】字符串判等

#include<iostream>
#include<string>
#include<map>
#include<algorithm>
using namespace std;
string s;
int main()
{string s1, s2,ss1,ss2;getline(cin, s1);getline(cin, s2);/*将大写字母全部转换成小写*/for (auto& c : s1)if (c >= 'A' && c <= 'Z')c += 32;for (auto& c : s2)if (c >= 'A' && c <= 'Z')c += 32;/*将去除空格的字符串复制到新变量*/for (auto& c : s1)if (c != ' ')ss1 += c;for (auto& c : s2)if (c != ' ')ss2 += c;/*字符串判等*/if (ss1 == ss2)cout << "YES";elsecout << "NO";return 0;
}

2050:【例5.20】字串包含

#include<iostream>
#include<string>
#include<map>
#include<algorithm>
using namespace std;
int main()
{string s1, s2;cin >> s1 >> s2;/*判断s1和s2谁的长度长*/if (s1.length() < s2.length())swap(s1, s2);s1 += s1;if (s1.find(s2) != -1)cout << "true";elsecout << "false";return 0;
}

1839:【05NOIP提高组】谁拿了最多奖学金(用例只通过30%)

#include<iostream>
#include<string>
#include<map>
#include<algorithm>
using namespace std;
const int N = 1e2 + 10;
struct stu {string name;int qmscore;int bjscore;char gb;char sf;int lw;int sum;
} s[N];bool cmp(stu a, stu b) {if (a.sum == b.sum)return false;elsereturn a.sum > b.sum;
}int main() {int n; cin >> n;for(int i=0; i < n; i++) {cin >> s[i].name >> s[i].qmscore >> s[i].bjscore >> s[i].gb >> s[i].sf >> s[i].lw;s[i].sum = 0;if (s[i].qmscore > 80 && s[i].lw >= 1) s[i].sum += 8000;if (s[i].qmscore > 85 && s[i].bjscore > 80) s[i].sum += 4000;if (s[i].qmscore > 90) s[i].sum += 2000;if (s[i].qmscore > 85 && s[i].sf == 'Y') s[i].sum += 1000;if (s[i].qmscore > 80 && s[i].gb == 'Y') s[i].sum += 850;}sort(s, s + n, cmp);int total_sum = 0;for (int i = 0; i < n; i++) {total_sum += s[i].sum;}cout << s[0].name << endl << s[0].sum << endl << total_sum;return 0;
}

1839:【05NOIP提高组】谁拿了最多奖学金

#include<iostream>
#include<string>
#include<map>
#include<algorithm>
using namespace std;
const int N = 1e2 + 10;
string s;
int cnt;//统计数字个数
int main()
{getline(cin, s);//c++11特性for (auto c : s)if (c >= '0' && c <= '9')cnt++;cout << cnt;return 0;
}

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

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

相关文章

JAVA高并发——核心知识点

文章目录 1、重要概念1.1、同步(Synchronous)和异步(Asynchronous)1.2、并发(Concurrency)和并行(Parallelism)1.3、临界区1.4、阻塞(Blocking)和非阻塞(Non-Blocking)1.5、死锁(Deadlock)、饥饿(Starvation)和活锁(Livelock)1.6、并发级别1.6.1、阻塞1.6.2、无饥饿(Starvation…

2011-2022年上市公司ESG表现、制造业高质量发展与数字化转型原始数据计算结果do代码

2011-2022年上市公司ESG表现、制造业高质量发展与数字化转型 原始数据(exceldta)计算结果do代码 参照王丹&#xff08;2023&#xff09;的做法&#xff0c;对来自统计与决策《ESG表现、制造业高质量发展与数字化转型》一文中的基准回归部分进行复刻&#xff1a; 1、数据时间&a…

java 单例模式

单例模式是最简单的设计模式之一。即一个类负责创建自己的对象&#xff0c;同时确保只有单个对象被创建&#xff0c;提供一种访问其唯一的对象的方式&#xff0c;可以直接访问&#xff0c;不需要实例化该类的对象。 1、懒汉式&#xff0c;线程不安全 public class Singleton …

两个发散级数的和是否发散?

1、两个发散级数的和可能是收敛的也可能是发散的。 例子&#xff1a; 发散级数 ∑ 1 n \sum\frac{1}{n} ∑n1​和发散级数 ∑ ( 1 n 2 − 1 n ) \sum(\frac{1}{n^{2}}-\frac{1}{n}) ∑(n21​−n1​)的和是收敛级数&#xff1b; 发散级数∑(1/n) 和发散级数 ∑(1/n1/n) 的和是…

为什么你用的redis没有出现雪崩,击穿,穿透

一、前言 在大规模并发访问系统中&#xff0c;如果你的系统用到redis&#xff0c;在面试的时候面试官往往会问你的系统有没有出现雪崩&#xff0c;击穿&#xff0c;穿透这样的场景&#xff0c;然后是怎样解决的。博主也经常反复温习redis的特性&#xff0c;总是被雪崩&#xf…

不懂咱就学,记不住多看几遍(二)

一、Redis分布式锁中加锁与解锁、过期如何续命 实现要点&#xff1a; 互斥性&#xff0c;同一时刻&#xff0c;只能有一个客户端持有锁。防止死锁发生&#xff0c;如果持有锁的客户端因崩溃而没有主动释放锁&#xff0c;也要保证锁可以释放并且其他客户端可以正常加锁。加锁和…

请解释 C++ 中的析构函数,并说明它们的作用。

请解释 C 中的析构函数&#xff0c;并说明它们的作用。 在C中&#xff0c;析构函数&#xff08;Destructor&#xff09;是一种特殊类型的成员函数&#xff0c;用于在对象被销毁时执行特定的清理工作。析构函数的名称与类名相同&#xff0c;前面加上一个波浪号&#xff08;~&am…

【C++开篇 -- 入门语法篇】

C学习笔记---001 C知识开篇1、介绍C的背景以及与C语言的区别1.1、什么是C?1.2、C的背景 2、C与C语言的区别3、C优化命名空间3.1、C中的问题3.2、命名空间的应用 4、总结 C知识开篇 前言&#xff1a; 首先&#xff0c;C兼容C&#xff0c;C在C语言范畴上增添了一些优化&#xf…

WPF中样式

WPF中样式:类似于winform中控件的属性 <Grid><!-- Button属性 字体大小 字体颜色 内容 控件宽 高 --><Button FontSize="20" Foreground="Blue" Content="Hello" Width="100" Height="40"/></Grid&g…

proteus8.15图文安装教程

proteus8.15版本可以用STM32系列单片机来进行仿真设计&#xff0c;比7.8版本方便多了&#xff0c;有需要的朋友们可以在公众号后台回复 proteus8.15 获取软件包。 1、下载好软件包&#xff0c;解压如下&#xff0c;右键proteus8.15.sp1以管理员身份运行。 2、第一次安装&#x…

UE5 动态加载资源和类

// Called when the game starts or when spawned void AMyActor::BeginPlay() {Super::BeginPlay();if (MyActor){UE_LOG(LogTemp,Warning,TEXT("MyActor is %s"),*MyActor->GetName());}//动态加载资源UStaticMesh* MyTmpStaticMesh LoadObject<UStaticMesh…

什么时候会触发FullGC?描述一下JVM加载class文件的原理机制?

什么时候会触发 FullGC&#xff1f; 除直接调用 System.gc 外&#xff0c;触发 Full GC 执行的情况有如下四种。 1. 旧生代空间不足 旧生代空间只有 在新生代对象转入及创建为大对象、大数组时才会出现不足的现象&#xff0c;当执行 Full GC 后空间仍然不 足&#xff0c;则…

ALINX黑金AXU3EGB 开发板用户手册RS485通信接口图示DI RO信号方向标识错误说明

MAX3485这类RS485芯片&#xff0c;DI是TTL信号输入&#xff0c;RO是TTL信号输出 如下图是MAX3485手册规格书。 因此 ALINX黑金AXU3EGB 用户手册 Page 43页 图 3-11-1 PL 端 485 通信的连接示意图&#xff0c;MAX3485芯片的DI RO信号输入输出标识方向是错误的&#xff0c;应为蓝…

Redis 只会用缓存?16种妙用让同事直呼牛X

1、缓存2、数据共享分布式3、分布式锁4、全局ID5、计数器6、限流7、位统计8、购物车9、用户消息时间线timeline10、消息队列11、抽奖12、点赞、签到、打卡13、商品标签14、商品筛选15、用户关注、推荐模型16、排行榜图片 1、缓存 String类型 例如:热点数据缓存(例如报表、明…

Spring Farmework,Spring Boot,Spring MVC 分别是什么?它们的关系又是什么?

Spring Framework是一个综合性的Java开发框架&#xff0c;提供了一系列的模块和功能来简化企业级应用程序的开发。Spring框架包括IoC&#xff08;Inversion of Control&#xff09;容器、AOP&#xff08;Aspect-Oriented Programming&#xff09;支持、数据访问、事务管理、模型…

机器学习---HMM前向、后向和维特比算法的计算

1. HMM import numpy as np# In[15]:class HiddenMarkov:def forward(self, Q, V, A, B, O, PI): # 使用前向算法N len(Q) # 状态序列的大小M len(O) # 观测序列的大小alphas np.zeros((N, M)) # alpha值T M # 有几个时刻&#xff0c;有几个观测序列&#xff0c;就有…

小米4A路由器如何刷OpenWRT并结合内网穿透实现公网远程访问

文章目录 推荐前言1. 安装Python和需要的库2. 使用 OpenWRTInvasion 破解路由器3. 备份当前分区并刷入新的Breed4. 安装cpolar内网穿透4.1 注册账号4.2 下载cpolar客户端4.3 登录cpolar web ui管理界面4.4 创建公网地址 5. 固定公网地址访问 推荐 前些天发现了一个巨牛的人工智…

红队学习笔记Day6 --->干货分享

今天看到这样的一个东西&#xff0c;好好好&#xff0c;有点恐怖&#x1f613;&#x1f613;&#x1f631;&#x1f631;&#x1f631;&#x1f631; 我就想网安是不是也有这种东西&#xff1f; 我来试试 icmp&#xff0c;RDP&#xff0c;arp&#xff0c;dhcp&#xff0c;nat&a…

JavaScript排序

直接看代码 <table border"1" cellspacing"0"><thead class"tou"><tr><td>选择按钮</td><td>汽车编号</td><td>汽车图片</td><td>汽车系列名称</td><td>汽车能源</…

Android 基础技术——Binder 机制

笔者希望做一个系列&#xff0c;整理 Android 基础技术&#xff0c;本章是关于Binder 机制 什么是Binder 机制&#xff1a;Binder 是一种进程间通信机制 驱动&#xff1a;Binder 是一个虚拟物理设备驱动 应用层&#xff1a;Binder 是一个能发起通信的 Java 类 为什么要使用Bind…