每日OJ_牛客_字符串计数(模拟26进制)

目录

牛客_分解因数(简单模拟)

解析代码


牛客_分解因数(简单模拟)

字符串计数_美团笔试题_牛客网


解析代码

        题目意思:按照字典序列:找到s1和s2之间长度在len1和len2范围内的字符串个数。直接做不好处理,此处需要转化思路,找到一个合适的模型:因为从‘a’~'z',刚好有26个字母,因此可以将s1 和s2看成是26进制数据,题目就变得简单了,将其转化为:从s1和s2之间有多少个不同数字,最后求解出长度不同的数组的个数即可。

思路:

  1. 循环接受收入,保证所有测试用例可以验证到。
  2. 将s1和s2补齐到len2位,因为在字典序列中s1比s2靠前,因此s1后序所有位补'a',s2后 补'z'+1。
  3. 确认s1和s2两个字符串每个字符位置上的差值。
  4. 确认len1和len2之间不同字符的个数。
  5. 注意输出时需要模1000007。
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <cmath>
#define N 1000007
using namespace std;

int main() // 补齐字符串,按照26进制进行计算
{
	string s1, s2;
	int len1 = 0, len2 = 0;
	while (cin >> s1 >> s2 >> len1 >> len2)
	{
		// 将该字符串看成是26进制数,为了简单起见,将s1和s2补长到len2长度
		// 注意:s2补的是'z'+1, 因为'z' - 'a' = 25
		s1.append(len2 - s1.size(), 'a');
		s2.append(len2 - s2.size(), (char)('z' + 1));

		vector<int> arr(len2); // 确认s1和s2的两个字符串每个位置上的差值
		for (int i = 0; i < len2; ++i)
		{
			arr[i] = s2[i] - s1[i];
		}

		int result = 0; // 确认len1和len2之间可组成的不同字符串的个数
		for (int i = len1; i <= len2; ++i)
		{
			for (int k = 0;k < i;k++)
			{
				result += arr[k] * pow(26, i - 1 - k);
			}
		}
		//所有字符串最后都不包含是s2自身,所以最后要减1;
		cout << (result - 1) % N << endl;
	}
	return 0;
}

在JarvisOJ的Level2题目中,给出了三个关于解题的代码片段的引用。引用和都是给出了关于解题的代码,其中引用是关于x64架构的代码,引用是关于i386架构的代码。这些代码都是用于获取Shell的payload。而引用则是对这个题目的解题思路的说明。 具体来说,在这个题目中,程序调用了system函数,并且存在/bin/sh字符串。通过对return address进行覆盖,可以将程序的控制流引导到system函数,并将/bin/sh字符串作为参数传递给它,从而获取Shell。其中,payload中的一些关键地址和字符串的具体值需要根据具体题目的情况来确定。 需要注意的是,这个题目的具体实现可能与上述引用中的代码有所不同,因此需要根据实际情况进行调整。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [jarvisoj_level2_x64](https://blog.csdn.net/zip471642048/article/details/125448386)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [jarvisoj_level2](https://blog.csdn.net/m0_55086916/article/details/128089924)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GR鲸鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值