题解 P6409 【[COCI2008-2009#3] KEMIJA 】

· · 题解

题目传送门

一开始代码bug了,已修改,重新提交

这是一道密码题 (毕竟加密的规则都告诉你了,那这就是一道水题doge

思路

类似尺取法(并不恰当的类比),这里的尺子长度为2就可以做了

下面举一例:

原文:cn ak ynoi and tui osu

加密后:cn apak ynopoipi apand tupuipi oposupu

因为是倒推原文 (让你加密的话依然水)

所以我们可以先找'p',再找它对应的那个元音

注意:不是找到任意一个'p'就对它进行删去处理,一定要有元音匹配。(废话,这是显然的)

思路理清,只要代码不敲错,这种题目肯定能A

这里不需要一下子把字符串读完,可以一个一个字符读(长度小于等于100怕啥)

记录上一位和这一位,如果该位是'p'且上一位是元音,那么下一位不存,直接getchar()读掉,存下下位,以此类推。

(未匹配上的读入后输出即可,无需存储)

代码展示:

#include<iostream>
#include<sstream>
#include<fstream>
#include<vector>
#include<list>
#include<deque>
#include<queue>
#include<stack>
#include<map>
#include<set>
#include<bitset>
#include<algorithm>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cctype>
#include<cmath>
#include<ctime>
#include<iomanip>
#include<complex>
#include<climits>
#define re register
#define in inline
#define pi acos(-1.0)
#define inf 2147483640
#define cd complex<double>
using namespace std;
in int read()
{
    int sum=0,negative=1;
    char ch=getchar();
    while(ch<'0'||ch>'9')
    {
        if(ch=='-')negative=-1;
        ch=getchar();
    }
    while(ch>='0'&&ch<='9')
    {
        sum=sum*10+ch-'0';
        ch=getchar();
    }
    return sum*negative;
}
in void write(int X)
{
    if(X<0)putchar('-'),X=-X;
    if(X>=10)write(X/10);
    putchar(X%10+'0');
}
int main()
{
    char last='\0',now;
    while(now!='\n'){
        now=getchar();
        if(now=='p'){
            if(last=='a'||last=='e'||last=='i'||last=='o'||last=='u'){
                getchar();
                now=getchar();
            }
        }
        putchar(now);
        last=now;
    }
    return 0;
}
制作不易,求资瓷!

Thanks For Watching!