目录
神器宝盒
特殊数字
神秘门的密码
找鸭子
银河间的数字之战
小码哥的英语
小码哥的艰难选择
小码哥搭建花圃
科学记数法
世界警察
中转站
安全验证
旅行
计算机的算力比我们强太多了 ,如果是拼单纯的计算力和算力我们毫无胜算
神器宝盒
难度:青铜
①时间限制:1秒
巴占用内存:64M
有一个魔法世界,小码哥是一位勇敢的冒险者。在魔法世界中,有一个神器宝盒,小码哥有多少宝
物放进这个宝盒,宝盒会将里面的宝物复制一份,相当于1个宝物变成了2个宝物,2个宝物变成了
4个宝物,14个宝物变成了28个宝物,但是当放入宝盒的宝物数为1©的倍数时宝盒就会将放入的宝
物吸收,让宝物消失“归零”。
现在小码哥有个宝物,请你帮忙计算这个宝物放入宝盒后能得到多少宝物。
格式
输入格式:一行一个整数n(1≤n≤100000)表示放进宝盒的宝物数量。
//
// Created by abner on 2023/11/8.
//
#include <bits/stdc++.h>
using namespace std;
int main(){
int n;
cin >>n;
if(n%10 != 0 )
cout<<n*2;
else
cout <<0;
return 0;
}
特殊数字
难度:青铜
0时间限制:1秒
巴占用内存:64M
小码哥是一位勇敢的数学冒险家,他正在探索一个神秘的数字迷宫。迷宫中有许多数字,小码哥需
要在一个范围里面[n,N]n(1≤n≤N),N(n≤N≤100000)中找到全部特殊数字,该
数字该数字能同时被2和3整除,并计算全部特殊数字之和。
你能帮他计算范围内的特殊数字之和吗?
格式
输入格式:一行,输入两个数n和N,中间有一个逗号,n(1≤n≤N),N(n≤N≤
100000)表示特定寻找范围。
输出格式:一行整数表示范围内特殊数字之和。
//
// Created by abner on 2023/11/8.
//
#include <bits/stdc++.h>
using namespace std;
int main(){
int n,N;
char comma;
cin >>n >>comma >>N;
int ans = 0;
for (int num = n;num <= N;num++){
if(num%2== 0 && num%3==0){
ans += num;
}
}
cout <<ans;
return 0;
}
神秘门的密码
子难度:白银
①时间限制:1秒
巴占用内存:64M
小码哥无意中闯入数字世界,数字世界中有道神秘的门堵住了小码哥前进的方向,门上有密码,密
码上写着:“正确密码经过了以下变换:假密码为字符串,若假密码n的长度为奇数时真密
码是123456;若假密码的长度为偶数时,真密码为假密码前一半的字符串和假密码后一半字
符串的反转字符串的拼接结果成的字符串”。如假密码为:ye1he5w4r,真密码为123456;若假密
码为3j83u5jf,真密码为3j83fj5u。小码哥不知道真密码是什么,你能帮他吗?
格式
输入格式:一行一个长度为s(1≤s≤1000000)的字符串n表示假密码。
输出格式:一行一个字符串表示真密码字符串。
//
// Created by abner on 2023/11/8.
//
#include <bits/stdc++.h>
using namespace std;
int main(){
string s,s2;
cin >>s;
int len = s.length();
if(len%2){
cout<<123456;
return 0;}
for (int i = 1;i <= len / 2;i++)
s2+=s[i-1];
for (int i = len;i>len / 2;i--)
s2+=s[i-1];
cout <<s2;
return 0;
}
找鸭子
难度:青铜
时间限制:1秒
巴占用内存:64M
小码哥在家里养了很多鸭子,过年的时候想在家里把家里年龄最大的鸭子做成除夕夜的一道菜,所
以他把鸭子按照年龄标记为大写字母A-Z,A表示年龄最小,Z表示年龄最大,如家里的鸭子标记成
了AAAABBCCC表示家里养了9只鸭子,其中年龄为A的鸭子为4只,年龄为B的鸭子有2只,年龄为C
的鸭子有3只,年龄为C的鸭子年龄最大,可以作为年夜菜,但是请注意,标记好的鸭子可能会跑掉
找不到了,所以可能不是连续的字符串。在个鸭子中,你能帮他找到年龄最大的鸭子的年龄
吗?
格式
输入格式:一行一个长度为n(1≤n≤100000)的鸭子年龄字符串,注意不一定是连续的
字符串(字母在字母表中相邻为连续的字符串,如ABC算是连续字符串,BAC则
不是连续字符串)。
输出格式:一行一个字符表示最大鸭子年龄。
//
// Created by abner on 2023/11/8.
//
#include <bits/stdc++.h>
using namespace std;
int main() {
string s;
char ch = 'A';
cin >> s;
for (int i = 0; i < s.length(); i++){
if (s[i] > ch)
ch = s[i];
}
cout<<ch;
return 0;
}
银河间的数字之战
难度:青铜
①时间限制:1秒
巴占用内存:256M
在一个遥远的银河,两个星球:
A星和
B星因为争夺资源而产生了矛盾。这两个星球都有强大
的能量,这种能量可以量化为一个整数。
A星的能量为整数a,
B星的能量为整数b,整数
的绝对值不超过105。但这两个星球很特别,它们不通过战争解决矛盾,而是通过数字之战。
数字之战
的规则非常简单:两个星球直接相互接触,将他们的能量合并,生成一个新的整数,这
个新的整数就是他们的合力。但要注意,星球的能量可能是负的!
作为银河的和平使者,你被委派去计算他们的合力是多少,从而为两个星球制定一个和平方案。请
你帮助它们计算出合力的数值。
格式
输入格式:一行,输入两个整数α,b(a,b≤105),表示A星和B星的能量。
输出格式:一个整数,表示他们的合力。
//
// Created by abner on 2023/11/8.
//
#include <bits/stdc++.h>
using namespace std;
int main() {
int a, b;
cin >> a >> b;
cout << a + b;
return 0;
}
变了吗,一切好像又没有变
小码哥的英语
号难度:白银
①时间限制:1秒
巴占用内存:256M
小码哥在做英语单选题的时候突然想到了一个很有意思的问题:单选题的答案都是A或者B,那么很
多道题目的答案组成的就是一个A和B组成的字符串。如果两个相邻的题目的答案是相同的,小码哥
就可以修改这两个题目的答案,改成都是A、都是B或者一个是A另外一个是B,小码哥把这个定义
为一次操作。那么对于任意一个答案字符串,最少需要多少次操作,才能使得它满足:任意相邻的
题目的答案都不同。
格式
输入格式:第一行包含一个数字n(1≤n≤1000),表示字符串的个数:
后面的n行,每一行表示一个长度为L(1≤L≤10000)的,由字符A和B随
机组成的字符串。
输出格式:输出有多行,每一行表示对应字符串需要的最少的操作次数T(0≤T≤10000
//
// Created by abner on 2023/11/8.
//
#include <bits/stdc++.h>
using namespace std;
int n;
string s;
int main(){
cin >>n;
while (n--){
cin >>s;
int len = s.length(),ans =0;
for (int i=0;i<len;i++){
if(i%2==0 && s[i]=='B')
ans++;
if(i%2==1 && s[i]=='A')
ans++;
}
ans = min(ans,len - ans);
cout <<ans <<endl;
}
return 0;
}
小码哥的艰难选择
号难度:白银
①时间限制:1秒
巴占用内存:512M
小码哥养了很多花,这些花每天都需要大量的肥料,现在小码哥提供不起这么多肥料了,他决定从
所有的花里面挑选一个淘汰,规则如下:
每一个花的初始分数是1880分:
在总共(1≤n≤100)个回合里,每一个回合,小码哥会随机给一个花对应的分数(可正可
负),需要加在鲜花的当前分数上。
最后谁的分数最少则淘汰谁,如果出现两个分数一样的,则淘汰掉最先获得这个分数的。
格式
输入格式:第一行包含整数n(1≤n≤100),表示回合数。
第2~十1行,按照时间顺序输入花的名字和得分(空格隔开)
的信息,其
中名称是长度为L(1≤工≤20)的英语小写字母组成的字符串,分数的绝对值不
大于10000。
//
// Created by abner on 2023/11/8.
//
#include <bits/stdc++.h>
using namespace std;
int n,ansScore = 0x3f3f3f3f;
string ansName;
map<string,bool>m1;
map<string,int>m2,m3;
map<string,int>::iterator it;
int main() {
cin >> n;
for (int i = 1; i <= n; i++) {
string flower;
int score;
cin >> flower >> score;
if (!m1[flower]) {
m1[flower] = true;
m2[flower] = 1000 + score;
} else
m2[flower] += score;
m3[flower] = i;
}
for (it = m2.begin(); it != m2.end(); it++)
ansScore = min(ansScore, it->second);
int index = 0x3f3f3f3f;
for (it = m2.begin(); it != m2.end(); it++)
if (it->second == ansScore)
if (m3[it->first] < index) {
index = m3[it->first];
ansName = it->first;
}
cout << ansName << endl << ansScore;
return 0;
}
小码哥搭建花圃
难度:白银○
时间限制:1秒
巴占用内存:256M
小码哥准备搭建一个花圃,现在他的手里有五段长度为正整数的围栏,他想知道,这五段围栏中,
是否存在四段可以构成一个正方形,或者一个矩形(此处特指长度和宽度不同的矩形),或者不存
在。
请你帮助他计算下。
格式
输入格式:输入的第一行包含四个空格分隔的正整数,数字的范围是1到100000(两边都是
闭区间),表示五段围栏的长度。
输出格式:如果存在四段组成正方形,则输出“Square”。
如果存在四段组成矩形,则输出"Rectangle”。
否则输出“No
//
// Created by abner on 2023/11/8.
//
#include <bits/stdc++.h>
using namespace std;
int main() {
map<int, int> m1;
map<int, int>::iterator it;
int length;
for (int i = 1; i <= 5; i++) {
cin >> length;
m1[length]++;
}
int flag = 0;
for (it = m1.begin(); it != m1.end(); it++) {
if (it->second == 2)
flag++;
if (it->second >= 4) {
cout << "Square";
return 0;
}
if (flag == 2) {
cout << "Rectangle";
return 0;
}
}
cout << "No";
return 0;
}
科学记数法
难度:白银
0时间限制:1秒
巴占用内存:512M
科学记数法是一种记数的方法。把一个数x表示成a与1的b次幂相乘的形式,如a×10
(1≤|a<10,a不为分数形式,b为整数),这种记数法叫做科学记数法,可简写为aEb。比
如:对于数12580000使用科学记数法表示为:1.258E7
现在需要你将给定的一个it范围内的正数x通过科学记数法表示出来,注意:如果b=0,则
Eb无需输出,仅输出a即可。
特别说明的是,类似于1©这种数字,最终的结果应该是1E2。即如果a是一个小数位(小数位指的
是.符号后面的所有位)全部为的小数,我们a的整数形式去表示。
格式
输入格式:输入一个int范围内的正数x,即0<x≤231一1。
输出格式:打印唯一的一行,即给定数字心的”科学记数法”。
// // Created by abner on 2023/11/8. // #include <bits/stdc++.h> using namespace std; string x,ans; int main(){ cin >>x; if (x.length()==1) { cout << x; return 0; } ans = ans + x[0]+'.'+x.substr(1); int i = ans.length()-1; while (ans[i]=='0') i--; if(i==1) i=0; for (int j=0;j <=i;j++) cout <<ans[j]; cout <<"E"<<x.length()-1; return 0; }
我们会遇见什么样的人,取决于我们是什么样的人
世界警察
难度:黄金
0时间限制:4秒
巴占用内存:1024M
世界警察小码哥来谈判了,恐怖分子在银行挟持了个人质,每个人质都所属一个国家,第
个人质所属的国家为℃:,人质排成了一排,位置都是固定的。经过商讨,恐怖分子允许小码哥可
以带走任意一段连续区间内的人质。但是上级要求小码哥,最好每个国家的人质都带回来一个,不
希望人质中有重复的国家。请问小码哥最多可以带出来多少人质。
格式
输入格试:第一行一个正整数n,表示共有n个人质:
第二行共有个正整数,第i个正整数表示第i个人质的所属国家℃:。
输出格式:一个整数表示小码哥最多可以带出来的人质数。
//
// Created by abner on 2023/11/8.
//
#include <bits/stdc++.h>
using namespace std;
const int N = 1e6 +7;
int n,a[N],ans,num;
map<int,int>mp;
int main(){
cin >>n;
for (int i=1;i <n;++i)
cin >>a[i];
int l=1,r=1;
while (l<=r && r<=n){
if (!mp[a[r]]) {
mp[a[r]]++, r++, num++;
ans = max(ans, num);
}else{
while (a[l] != a[r])
mp[a[l]]--,l++,num--;
mp[a[l]]--,l++,num--;
}
}
cout <<ans;
return 0;
}
中转站
号难度:黄金0时间限制:1秒
巴占用内存:256M
物流业为了降低物流成本,提高物流效率,运输过程中通常不会由始发地直达目的地,而是经由多
个中转站中转,最终到达目的地。最常见的便是快递业,由于中转站有很多,要想将所有中转站两
两互通代价过高,因此每个中转站只会与个别中转站单向或双向连通。
在接受订单时,为了判断该物件能否送达,会先查询本站是否能直接送达目的地站点;若不能,则
递归查询本站可达中转站,以及中转站的中转站能否送达,直至找出目的地或找遍全部中转站。
小码哥去快递点实习的第一天就遇到了问题,系统因不明原因无法正常判断物件能否送达,好在整
个物流网的中转站信息均可访问,小码哥便决定自己设计一个程序临时急用。
格式
输入格式:第一行输入两个正整数几,m,n是整个物流网所有中转站的数目,小码哥所
在的站点是1号,目的地的站点是n号:
接下来的m行,每行输入两个正整数x,y,代表中转站x可以送往中转站
//
// Created by abner on 2023/11/8.
//
#include <bits/stdc++.h>
using namespace std;
const int N = 507;
int n,m,x,y,mp[N][N];
bool vis[N],flag;
void dfs(int num){
if (num == n){
flag = true;
return;
}
for(int i=2;i<=n;i++){
if (!vis[i] && num !=i&&mp[num][i]) {
vis[i] = true;
dfs(i);
}}}
int main(){
cin >>n >>m;
int x,y;
for (int i=1;i<=m;i++) {
cin >> x >> y;
mp[x][y] = 1;
}
dfs(1);
if(flag)
cout <<"Yes";
else
cout <<"No";
return 0;
}
安全验证
难度:钻石
0时间限制:1秒
巴占用内存:256M
小码哥是一名密码学专家,一天他的朋友拜托他设计一个简单的标识验证程序,用于服务器安全验
证。
小码哥答应了朋友的请求,设计了一个简单的标识验证方法。服务器会自带一个安全标识串S,
每隔一段时间会自动更新,客户端的每次请求都会先收到服务器的标识串,然后在下一次更新前需
要找出S中的一个真子串T,满足既是S的前后缀,又在S中出现至少一次的最长
串,找到后才能正常与服务器交互。
小码哥虽然精通密码学,但对开发一窍不通,于是找到了你,希望你能协助他完成程序开发环节。
格式
输入格式:一个字符串S,全部是小写字母。
输出格式:满足条件的最长直子串T,如果没有就输出”No”
//
// Created by abner on 2023/11/8.
//
#include <bits/stdc++.h>
using namespace std;
const int N = 1e6 +7;
int len,pi[N];
char s1[N],s2[N],s3 [N];
void prefix_function(char *s,int len){
for (int i=1;i<len;i++) {
int j = pi[i - 1];
while (j > 0 && s[i] != s[j])
j = pi[j - 1];
if (s[i] == s[j])
j++;
pi[i] = j;
}}
int main(){
cin >>s1;
len = strlen(s1);
strcpy(s2,s1 + 1);
s2[strlen(s2)-1]='\0';
prefix_function(s1,len);
int temp = pi[len - 1];
while (temp){
strncpy(s3,s1,temp);
s3[temp]='\0';
if (strstr(s2,s3)) {
cout << s3;
return 0;
}
temp = pi[temp -1];
}
cout <<"No";
return 0;
}
旅行
难度:钻石
①时间限制:1秒
巴占用内存:256M
假期快要结束了,小码哥还没有好好放松一下,便决定四处转转。小码哥所在的地方有N个景点
和M条有向道路连接这些景点。景点从1到N编号,道路从1到M编号,第1条道路连接
景点U和V,这意味着小码哥可以从景点U走到景点V。
小码哥想到每个景点都看一看,他可以随意选择一个景点作为起点,并随意选择另一个景点作为终
点。为了更好的欣赏沿途风景,小码哥决定制定一个计划,使他能够恰好只到每个景点一次并恰好
只经过每条道路一次。现在给你所有景点和道路的信息。请告诉小码哥是否存在一种方法可以满足
他的计划。
如果只有一个景点,则小码哥可以直接去这个景点,我们认为这种情况也是满足小码哥的计划的。
格式
输入格式:第一行包含一个整数T,表示测试用例的数量,
对于每个测试用例,第一行包含两个整数N和M,其中N是景点的数量,M是
//
// Created by abner on 2023/11/8.
//
#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 +7;
int T,n,m;//n个节点,m条边
struct NODE {
int in, out;
}graph[N];
int fa[N];
void init(int n)//初始化
{
for (int i=1;i <= n;i++)
fa[i]=i,graph[i].in = graph[i].out = 0;
}
int find(int x)//查找,带路径压缩
{
return x ==fa[x] ?x : (fa[x] = find(fa[x]));
}
void merge(int i,int j)//合并
{
int x = find(i),y = find(j);
if (x != y)
fa[x] = y;
}
bool connect(int n) {//判断所有点是否连通
int tmp = find(1);
for (int i = 2; i <= n; i++) {
if (find(i) != tmp)
return false;
}
return true;
}
int main() {
cin >> T;
for (int i = 1; i <= T; i++) {
cin >> n >> m;
if (n == 1) {
cout << "YES" << endl;
continue;
}
init(n);
int u, v;//u指向v的路径
for (int j = 1; j <= m; j++) {
cin >> u >> v;
graph[u].out++;
graph[v].in++;
merge(u, v);
}
int sum1 = 0, sum2 = 0, sum3 = 0;//sum1多少个点出度为1,入度为1
//sum2多少个点出度为1,入度为0
//sum3多少个点出度为0,入度为1
for (int j = 1; j <= n; j++) {
if (graph[j].out == 1 && graph[j].in == 1)
sum1++;
if (graph[j].out == 1 && graph[j].in == 0)
sum2++;
if (graph[j].out == 0 & graph[j].in == 1)
sum3++;
}
if (sum1 == n - 2 && sum2 == 1 && sum3 == 1 && connect(n))
cout << "YES" << endl;
else
cout << "NO" << endl;
}
return 0;
}