专栏文章

题解:CF2168A1 Encode and Decode (Easy Version)

CF2168A1题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@min3jxc6
此快照首次捕获于
2025/12/01 19:59
3 个月前
此快照最后确认于
2025/12/01 19:59
3 个月前
查看原文

题目大意

这是该问题的简单版本。不同版本间的区别在于,此版本中保证 ai26a_i \leq 26。这是一个 “两次运行”(通信类)问题。在这类问题中,你的程序会被运行两次。两次运行之间,所有内存中存储的变量都会丢失,但第一次运行时获得的信息对于第二次运行正确解决问题可能至关重要。因此,核心挑战在于利用有限的输出方式,在两次运行之间建立 “通信”。两次运行的时间限制和内存限制是不共享的。例如,在本题中,虽然总时间限制是 22 秒,但只有当某次运行超过 22 秒时,你才会收到超时的评判结果。如果两次运行各耗时 1.51.5 秒,这是完全允许的。在本题中,你的任务是设计一个策略,对一个大小为 nn 的数组 aa 进行编码和解码。

思路

这道题我们只需要按照题目说的,如果 ssfirst,那么把整数转化为字符串,否则如果是second,就将字符串转化为整数,由于 ai26a_i \le 26,所以我们可以直接把 112626 转化为 aazz 即可,字母同理。
注意这题是通信题,一定要在上一个进程结束后才能进行下一个进程,例如定义变量。

代码

CPP
#include<bits/stdc++.h>
#define int long long
using namespace std;
signed main(){
    string s;
    cin>>s;
    if(s=="first")
    {
    	int n,a[100005];
        cin>>n;
        for(int i=1;i<=n;i++) 
        {
            scanf("%lld",&a[i]);
        }
        string s1="";
        for(int i=1;i<=n;i++)
        {
        	s1+=char(a[i]+'a'-1);
        }
        cout<<s1<<endl;
    }
    else  if(s=="second")
    {
    	string s2;
        cin>>s2;
        int b[100005];
        cout<<s2.size()<<" ";
        for(int i=0;i<s2.size();i++)
        {
            cout<<(int)(s2[i]-'a'+1)<<" ";
        }
        cout<<endl;
    }
}

评论

0 条评论,欢迎与作者交流。

正在加载评论...