日度归档:2026年3月16日

解密

【题目描述】

上一次,小猴的加密方式很快就被破解掉了,后来他学习了一个很经典的加密方式——“凯撒密码”,可是他觉得这个也很容易就会被别人破解,所以他决定创造一种”猴氏撒密码”。

和”凯撒密码”一样,”猴氏撒密码撒密码”也是利用字母向后偏移来实现的,但是他觉得偏移值如果固定的话也很容易被人破解,所以在加密后还会把这个字母再加上偏移值个数,例如 “a” 在偏移值为 3 时,会被加密为 “dddd“。如果保证明文中相邻字母加密后的字母不会相同,现在给出你一个加密后的结果,你能把明文找出来

【输入格式】

第一行一个仅由小写字母组成的的字符串 ss,表示加密后的结果。

【输出格式】

一个字符串表示加密前的明文。

【输入输出样例#1】

输入#1

aaadddd

复制

输出#1

ya

复制

【输入输出样例#2】

输入#2

hhrrrrppd

复制

输出#2

good

复制

【输入输出样例#3】

输入#3

lucky

复制

输出#3

lucky

复制

【说明提示】

样例 11 解释:

aaa” 连续的 3 个 a 表示偏移值是 2,所以对应的明文就是 y

dddd” 连续的 44 个 d 表示偏移值是 3,所以对应的明文就是 a

因此 “aaadddd” 对应的明文是 “ya“。

【数据范围】

对于 100% 的数据: 1字符串s的长度1000000

【代码样例】

#include <bits/stdc++.h>
using namespace std;
string s;
char a;
int cnt;
int main(){
    cin>>s;
    a=s[0];
    cnt=0;
    for(int i=1;i<=s.size();i++){
        if(a==s[i]){
            cnt++;
        }
        else{
            if((a-cnt)<'a') {
                cout << char((a-cnt-'a'+1)%26+'z');
            } else {
                cout<<char(a-cnt);
            }
            a=s[i];
            cnt=0;
        }
    }
}

眼红的Medusa(数据增强)

 题目描述

虽然 Miss Medusa 到了北京,领了科技创新奖,但是她还是觉得不满意。原因是:他发现很多人都和她一样获了科技创新奖,特别是其中的某些人,还获得了另一个奖项——特殊贡献奖。而越多的人获得了两个奖项,Miss Medusa就会越眼红。于是她决定统计有哪些人获得了两个奖项,来知道自己有多眼红。

【输入格式】

第一行两个整数 n,m,表示有 n 个人获得科技创新奖,m 个人获得特殊贡献奖。

第二行 n 个正整数,表示获得科技创新奖的人的编号。

第三行 m 个正整数,表示获得特殊贡献奖的人的编号。

【输出格式】

输出一行,为获得两个奖项的人的编号,按在科技创新奖获奖名单中的先后次序输出。

【输入输出样例#1】

输入#1

复制

4 3
2 15 6 8
8 9 2

输出#1

复制

2 8

【数据范围】

对于 50% 的数据,0n,m1000,获得奖项的人的编号 <2×109

对于 100% 的数据,0n,m106,获得奖项的人的编号 <2×1018

输入数据保证第二行任意两个数不同,第三行任意两个数不同。

【代码样例】

#include <bits/stdc++.h>
using namespace std;
int n,m;
long long a1[1000005],a2[1000005];
int main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++) cin>>a1[i];
	for(int i=1;i<=m;i++) cin>>a2[i];
	sort(a2+1,a2+m+1);
	//sort(a1+1,a1+n+1);
	for(int i=1;i<=n;i++){
		if(a1[i]==a2[lower_bound(a2+1,a2+m+1,a1[i])-a2]){
			cout<<a1[i]<<" ";
		}
	}
}

更奇怪的照片

【题目描述】

Farmer John 正再一次尝试给他的 N 头奶牛拍照(2N1000)。

每头奶牛有一个范围在 1100 之内的整数的「品种编号」。Farmer John 对他的照片有一个十分古怪的构思:他希望将所有的奶牛分为不相交的若干组(换句话说,将每头奶牛分到恰好一组中)并将这些组排成一行,使得第一组的奶牛的品种编号之和为偶数,第二组的编号之和为奇数,以此类推,奇偶交替。

Farmer John 可以分成的最大组数是多少?

【输入格式】

输入的第一行包含 N。下一行包含 N 个空格分隔的整数,为 N 头奶牛的品种编号。

【输出格式】

输出 Farmer John 的照片中的最大组数。可以证明,至少存在一种符合要求的分组方案。

【输入输出样例#1】

输入#1输出#1
7
1 3 5 7 9 11 13
3

【输入输出样例#2】

输入#2输出#2
7
8 2 16 12 1 15 4
5

【输入输出样例#3】

输入#3输出#3
6
1 2 3 4 5 6
6

【说明提示】

样例1解释,以下是一种分成最大组数三组的方案。将 1 和 3 分在第一组,5、7 和 9 分在第二组,11 和 13 分在第三组。

【代码样例】

#include <bits/stdc++.h>
using namespace std;

int main() {
	int odd = 0, even = 0; //奇数、偶数
	int n;
	cin >> n;
	for (int i = 1; i <= n; i++) {
		int x;
		cin >> x;
		if (x % 2 == 0) {
			even++;
		} else {
			odd++;
		}
	}
	if (odd < even) {
		cout << 2 * odd + 1 << endl;
	} else if (odd >= even) {
		if ((odd - even) % 3 == 0) {
			cout << 2 * (even + (odd - even) / 3) << endl;
		} else if ((odd - even) % 3 == 1) {
			cout << 2 * (even + (odd - even) / 3) - 1 << endl;
		} else if ((odd - even) % 3 == 2) {
			cout << 2 * (even + (odd - even) / 3) + 1 << endl;
		}
	}
}