马蹄集oj赛(双周赛第二十一次)

2024-02-26 16:04

本文主要是介绍马蹄集oj赛(双周赛第二十一次),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

字符串的解码

数字问题

字符矩阵

移水造海

斐波那契,但是是字符串

伯兰语

换换换

银行账户

硬币塔

巨大的错误

三角形的个数

奇怪的和


字符串的解码


难度:黄金
时间限制:2秒四:占用内存:256 M
给你一个字符串,由[,],数字和大写字母组成,现要求对其解码字符串中形如[DX],表示D个连续的X,例如[4cB]或[2[2cB]]都可以表示-旦出现括号就会有数字,且为正整数,会有两组方括号相邻的情况,如[4AJ[5B]
格式
输入格式:一行字符串
输出格式:一行字符串

//
// Created by abner on 2024/2/26.
//
#include <bits/stdc++.h>
using namespace std;
const int N=1e6 +7;
string s;
int len;
void f(int u) {if (u == len || s[u] == ']')return;if (s[u] == '[') {u++;int num = 0;while (s[u] >= '0' && s[u] <= '9') {num = num * 10 + s[u] - '0';u++;}while (num--)f(u);int tmp = 1;while (tmp) {if (s[u] == '[')tmp++;else if (s[u] == ']')tmp--;u++;}f(u);} else {while (s[u] >= 'A' && s[u] <= 'Z') {cout << s[u];u++;}f(u);}
}int main() {cin >> s;len = s.length();f(0);return 0;}

数字问题


难度:黄金
时间限制:1秒
巴占用内存:128M
输入n,输出1一n的自然数中各数位只包含0或1的数的个数。
格式
输入格式:输入一个整型数字n(1≤n≤1e9)
输出格式:输出一行一个整数表示答案
样例1
输入:19
输出:3

//
// Created by abner on 2024/2/26.
//
#include <bits/stdc++.h>
using namespace std;int n;
int ans =0;
void f(int m){if (m>n)return;elseans++;f(m * 10);f(m * 10 + 1);
}
int main() {scanf("%d", &n);f(1);printf("%d", ans);return 0;
}

字符矩阵

难度:钻石
时间限制:1秒巴:占用内存:128 M
给你一个n*m 的小写字符矩阵,你可以选择删除一些列,使得剩下的字符矩阵的每一行的字符串从上到下的字典序非减。即字符串s和t具有相等的长度,s在字典上大于t并且s中8和t的最大公共前缀(前缀可能为空)之后的字符按字母顺序大于t的相应字符。
求最少删除多少列?
格式
输入格式:第一行输入两个整数 n,m 接下来 n 行每行输入 m 个字符。
输出格式:输出一个整数表示最少删除的列。

//
// Created by abner on 2024/2/26.
//
#include <bits/stdc++.h>
using namespace std;
const int N = 1e2 +7;
string s[N];
int a [N];
int n,m;
int ans;
int main(){cin >>n >>m;for (int i=0;i<n;i++)cin >>s[i];for(int i =0;i<m;i++){//扫描每-列int flag =0;for(int j = 1;j < n;j++)//看是否存在下面比上面字典序小的情况if(s[j][i] < s[j-1][i] && !a[j]){flag =1;break;}if (flag) {//如果存在,结果+1ans++;}else{for (int j=1;j<n;j++)if(!a[j] && s[j][i] > s[j-1][i])a[j]=1;}}cout <<ans <<endl;return 0;
}

移水造海


难度:钻石○时间限制:1秒
巴占用内存:128M
今天,无聊的小码哥打开了他的,他突发奇想,“我要把一个新世界的一块大陆用水桶运水填成
海”,尽管这个点子无聊透顶,但他真的去做了。
由于小码哥使用了修改器,他拥有了无限的水桶。一个水桶的水能够刚好填上一块格子。但如果倒
入水后水位高于两边中一边土地,那么水会溢出,这桶水相当于没倒过。
另外,世界左右两侧是虚空,水碰到虚空会消失。
现在给了你这个世界的地形图,告诉你这个世界的宽度以及每一列的土地的高度h,问你至少
要多少水桶的水才能填满这个世界(填满即无论在哪里倒一桶水都会溢出)。
格式
输入格式:第一行一个正整数,表示世界的宽度;

//
// Created by abner on 2024/2/26.
//
#include <bits/stdc++.h>
using namespace std;
int a[10005];int main(){int n,maxn = 0,ans =0;cin >> n;for (int i=0;i<n;i++){cin >> a[i];maxn = max(maxn,a[i]);}for(int i = 1;i<=maxn;i++) {//-一层-层遍历int last = -1;for (int j = 0; j < n; j++) {if (a[j] >= i) {if (last != -1)ans += j - last - 1;last = j;}}}cout <<ans;return 0;}

斐波那契,但是是字符串


难度:黄金
时间限制:1秒
巴占用内存:128M
现在有字符串组:
第0项ao=“IAKIOI”;
第1项a1=“WHENWILLSCORLLOFTAIWUCOMEOUT!!!”:
之后的第k项由第k一2项+第k一1项构成。
问第n项字符串的第c个字符是什么。
格式
输入格式:两个整数几,c意义如题
输出格式:一个字符表示答案

//
// Created by abner on 2024/2/26.
//
#include <bits/stdc++.h>
using namespace std;
#define ll long long
string a0 ="IAKIOI";
string a1 = "WHENWILLSCORLLOFTAIWUCOMEOUT!!!";
ll len[85],n,c;
void find(ll n,ll c){if(n==0){cout <<a0[c - 1];return;}if(n==1) {cout << a1[c - 1];return;}if (c <= len[n -2])find(n - 2,c);elsefind(n - 1,c-len[n - 2]);}int main() {cin >> n >> c;len[0] = a0.length();len[1] = a1.length();for (int i = 2; i <= n; i++)len[i] = len[i - 2] + len[i - 1];find(n, c);return 0;}

伯兰语


少 难度:黄金时间限制:1秒巴 占用内存:64 M
伯兰语有五个元音字母,分别是a,e,u。伯兰语单词中的每一个非元音i,o,(除了n)后都是元音(没有字母也不行,即单词末尾必须是a,n 这六个字符之一)。而元音和n没有此限制。i0,u,e如harakirhorsekingmyman和都是壟袈Σh邰符合规范的,而nbo都不符合。给你一个单词,问是否符合伯兰语单词的规范。nz格式输入格式:输入仅一行,是你需要判断是否符合规范的单词。
输出格式:输出仅一行,若符合则输出YES否则输出NO

//
// Created by abner on 2024/2/26.
//
#include <bits/stdc++.h>
using namespace std;
char ch[110];
char ss[5]={'a','e','i','o','u'};//元音表
bool pd(int i)
//判断元音
{for (int j = 0; j < 5; j++) {if (ch[i] == ss[j])return true;}return false;
}
int main() {cin >> ch;int len = strlen(ch);//提取长度bool flag = true;for (int i = 0; i < len - 1; i++) {if (!pd(i) && !pd(i + 1) && ch[i] != 'n')//判断flag = false;}if (!pd(len - 1) && ch[len - 1] != 'n')flag = false;if (flag)cout << "YES";elsecout << "NO";return 0;
}

换换换


难度:钻石时间限制:1秒四 占用内存:128 M
机器人小R在看一个魔术表演,魔术师面前有一排共N 个倒扣着的杯子,其中每一个下面都有个小玩具 t,并且每个小玩具都是唯一的。魔术师飞快地变换杯子之后让小R猜其中M个玩具在哪个杯子里。由于机器人小R内置的程序只能记录杯子的数量N,小玩具初始的位置p,以及魔术师每次变换杯子的位置 ,P2。小R的主人希望你能写一个程序,帮助小R找出玩具。
格式
输入格式:第一行给定三个整数 ,M,T,T 为魔术师操作的次数;接下来的 N 行,每行给定一个字符串 t;;之后的 T 行,每行给定两个位置 p1,P2,位置从1开始计数,最后 M 行,每行给定一个字符串 t。

//
// Created by abner on 2024/2/26.
//
#include <bits/stdc++.h>
#define N 50005
using namespace std;
int n,m,t;
string s[N];
map<string,int>mp;
int main(){string tmp;cin >>n >>m >>t;for(int i = 1; i<=n ;i++) {cin >> tmp;s[i] = tmp;mp[tmp] = i;}while (t--) {int p1, p2;cin >> p1 >> p2;swap(s[p1], s[p2]);swap(mp[s[p1]], mp[s[p2]]);}while(m--){cin >>tmp;cout<< mp[tmp]<<endl;
}return 0;
}

银行账户


难度:黄金时间限制:1秒巴: 占用内存:128 M7
据说对银行账户进行盗窃时,如果只盗取小数点下的数值,就不容易引起注意,所以你决定进行尝试。
银行总共有几个账户,m次转账,对每次转账,你可以盗取(转账金额-转账金额下取整)的资金,并使转入账户的警戒值增加相同数值,当任意账户的警戒值>1,或者无法实现转账(转出账户余额不足),或者m 次转账全部完成,你停止盗取,请计算总盗取金额。
格式
输入格式:第一行 n,m,表示有几个账户,m 条转账记录,第二行 几 个实数,表示每个账户的资金;
接下来 m 行,每行有三个参数;
整数 x,整数y,实数之,分别表示转出账户,转入账户,和转账金额。

//
// Created by abner on 2024/2/26.
//
#include <bits/stdc++.h>
using namespace std;
struct accont{double count;double warn;
}a[1005];
int main() {int n, m;int flag = 0;double ans = 0;scanf("%d%d", &n, &m);for (int i = 1; i <= n; ++i) {scanf("%lf", &a[i].count);a[i].warn = 0;}int x, y;double z;for (int i = 1; i <= m; ++i) {scanf("%d%d%lf", &x, &y, &z);if (a[x].count < z)break;a[x].count -= z;a[y].count += floor(z);ans += z - floor(z);a[y].warn += z - floor(z);if (a[y].warn > 1)break;}printf("%.2lf\n", ans);return 0;
}

硬币塔


黄金时间限制:1秒巴:占用内存:128 M难度:
一个k级的硬币塔从下到上,由1个银币,一个k-1级硬币塔,k个金币,一个k-1级硬币塔,1个银币堆成。其中,0级硬币塔只有一个金币。
问:n级硬币塔从下向上数i个有几个金币
格式
输入格式:一行用空格隔开的两个整数 n,i
输出格式:\整数表示答案

//
// Created by abner on 2024/2/26.
//
#include <bits/stdc++.h>
using namespace std;
#define ll long longll coin[45],gold [45];
ll find(ll n,ll i) {if (i == 0)return 0;if (n == 0)return 1;if (1 >= i)return 0;if (coin[n - 1] + 1 >= i)return find(n - 1, i - 1);if (coin[n - 1] + n + 1 >= i)return gold[n - 1] + i - coin[n - 1] - 1;if (coin[n - 1] * 2 + n + 1 >= i)return gold[n - 1] + n + find(n - 1, i - n - 1 - coin[n - 1]);return gold[n];
}
int main(){ll n,i;cin >> n >> i;coin[0] = gold [0]=1;for (int k=1;k <=n;k++){coin[k] = coin[k - 1] *2 +k+ 2;gold[k] = gold[k -1] * 2 + k;}cout <<find(n,i);return 0;
}

巨大的错误


难度:黄金时间限制:1秒巴 占用内存:128 M
提瓦特大陆上有一个贫穷的占星术士小码哥,在占星的时候,小码哥时常需要将命运启示他的信息与手中命运之轮上的命星一一对应,现在有几个启示和几个命星需要一一对应,有时,因为命运实在太过难以言明,小码哥会将所有的启示与命星都对应错了,此时称小码哥犯了一个巨大的错误,问一共有多少种情况可被称为“巨大的错误”
格式)
输入格式:输入一个正整数 n
输出格式:输出一个正整数代表所求答案

//
// Created by abner on 2024/2/26.
//
//错排公式的应用
#include <bits/stdc++.h>
using namespace std;
#define ll long long
ll a[21]={0,0,1};
int main(){
int n;
cin >>n;
for (int i=3;i<=n;i++)a[i]=(i-1)*(a[i-2]+a[i-1]);cout <<a[n];return 0;
}

三角形的个数


难度:钻石时间限制:1秒巴 占用内存:128 M
最近璃月的海灯节到了,一位来自码蹄集的小码哥正好游历至此,一种有趣的装饰图案引起了他的兴趣:这种图案将一个三角形每条边分为几等分,然后将对应的等分点相连,使得连成的线段平行于三条边中的一条,这样就构成了大三角套小三角的繁复图案。现在有许多类似的图案,这名学者想知道每个图案中各包含了几个三角形,请你帮帮他。
如图所示是一个二等分的例子:

//
// Created by abner on 2024/2/26.
//
#include <bits/stdc++.h>
using namespace std;
int f(int n){if (n == 1)return 0;if (n ==2)return 1;return (n - 1)  * n/2+f(n -2);
}
int main(){int n,N;cin >> N;while (N--) {cin >> n;int sum1 = 0, sum2 = 0;for (int i = 1; i <= n; i++) {sum1 += (n - i +1) * (n - i + 2) / 2;}sum2 = f(n);cout << sum1 + sum2 << endl;}return 0;}

奇怪的和


号难度:钻石
0时间限制:1秒
巴占用内存:128M
给出两个整数n,m,和一个n×m的矩阵。若该矩阵中两元素相同,sum(初始为零)就加上
它们所在位置的曼哈顿距离。求sum
的值。
格式
输入格式:第一行为两个正整数n,m;
之后的n行表示n*m的矩阵。
输出格式:一个数表示答案。

//
// Created by abner on 2024/2/26.
//
#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 +7;
int n,m;
struct POSITION{
int x,y;
};
vector<POSITION>v[N];
int ans;int main() {cin >> n >> m;for (int i = 1; i <= n; i++)for (int j = 1; j <= m; j++) {int num;cin >> num;v[num].push_back({i, j});int len = v[num].size();for (int k = 0; k < len; k++)ans += abs(v[num][k].x - i) + abs(v[num][k].y - j);}cout << ans << endl;return 0;
}

这篇关于马蹄集oj赛(双周赛第二十一次)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/749415

相关文章

哈理工OJ 2179(深搜)

组合 Time Limit: 1000 MSMemory Limit: 32768 K Total Submit: 7(5 users)Total Accepted: 6(5 users)Rating: Special Judge: No Description 给出一个正整数N,从集合{1,2,3..N} 中找出所有大小为k的子集, 并按照字典序从小到大输出。 Input 第一行是一个整

每日OJ_牛客_求和(递归深搜)

目录 牛客_求和(递归深搜) 解析代码 牛客_求和(递归深搜) 求和_好未来笔试题_牛客网 解析代码         递归中每次累加一个新的数,如果累加和大于等于目标,结束递归。此时如果累加和正好等于目标,则打印组合。向上回退搜索其它组合。此题本身就是一个搜索的过程,找到所有的组合。 #include <iostream>#include <cmath>#in

OJ-0905

题目 示例1: 输入:10 10 56 34 99 1 87 8 99 3 255 6 99 5 255 4 99 7 255 2 99 9 255 213 4输出:99 示例2: 输入:10 10 255 34 0 1 255 8 0 3 255 6 0 5 255 4 0 7 255 2 0 9 255 213 5输出:255 import java.util.

每日OJ_牛客_Emacs计算器(逆波兰表达式)

目录 牛客_Emacs计算器(逆波兰表达式) 解析代码 牛客_Emacs计算器(逆波兰表达式) Emacs计算器__牛客网 解析代码 逆波兰表达式(后缀表达式)求值,需要借助栈,思路: 循环输入,获取逆波兰表达式,然后进行以下补助,直到测试完所有的测试用例: 遇到数字字符串,将该数字字符串转化为数字然后入栈。遇到操作符时,从栈顶取两个数字,然后进行该运算符所对应运算

西北工业大学oj题-兔子生崽

题目描述: 兔子生崽问题。假设一对小兔的成熟期是一个月,即一个月可长成成兔,每对成兔每个月可以生一对小兔,一对新生的小兔从第二个月起就开始生兔子,试问从一对兔子开始繁殖,一年以后可有多少对兔子? 这道题目一眼看过去就是典型的递归问题,代码如下 public class RabbitReproduction {public static void main(String[] args) {in

★ 算法OJ题 ★ 力扣209 - 长度最小的子数组

Ciallo~(∠・ω< )⌒☆ ~ 今天,简将和大家一起做一道滑动窗口算法题--长度最小的子数组~ 目录 一  题目 二  算法解析 解法⼀:暴力求解 解法二:滑动窗口 三  编写算法 一  题目 209. 长度最小的子数组 - 力扣(LeetCode) 二  算法解析 解法⼀:暴力求解 算法思路: 从前往后枚举数组中的任意⼀个元素,把它当成起始位置

OJ-0903

题目 示例1 输入:30 12 25 8 19输出:15 示例2 输入:10 12 25 8 19 8 6 4 17 19 20 30输出:-1 题解 import java.util.ArrayList;import java.util.List;import java.util.Scanner;public class Main {public static

Leetcode - 138双周赛

目录 一,3270. 求出数字答案 二,3271. 哈希分割字符串 三,3272. 统计好整数的数目 四,3273. 对 Bob 造成的最少伤害 一,3270. 求出数字答案 本题数据范围小,可以将数字转换成字符串来做,这里教一种更省空间的做法。我们可以从后往前求出每一个数位的最小值min(a % 10, b  % 10,c % 10),a /= 10,b /= 10,c

【负载均衡式在线OJ】Compile_server 模块

文章目录 程序源码compile_server整体思路编译(compile.hpp)运行模块编译运行模块编译运行服务 程序源码 https://gitee.com/not-a-stupid-child/online-judge compile_server 整体思路 这个服务要对oj_server 发送过来的代码进行编译和运行,最后把结果返回给oj_server。 所以我

★ 算法OJ题 ★ 力扣18 - 四数之和

Ciallo~(∠・ω< )⌒☆ ~ 今天,爱丽速子将和大家一起做一道双指针算法题--四数之和~ 目录 一  题目 二  算法解析 三  编写算法  做此题前最好先看一下前两篇博客~: ★ 算法OJ题 ★ 力扣 LCR179 - 和为 s 的两个数字-CSDN博客 ★ 算法OJ题 ★ 力扣15 - 三数之和-CSDN博客 一  题目 18. 四数之和 - 力扣(Lee