Contest - zjnu province training(9)

这篇博客介绍了ACM竞赛中的模拟题型,包括键盘错位问题的解决方案,以及两种不同的数学问题:序列计算和线段计数。同时,还涉及到一个逻辑推理题目,关于判断机器人是否撒谎。最后,文章讨论了一个几何难题,涉及动态圆的碰撞问题,给出了问题的几何解析和解题思路。
摘要由CSDN通过智能技术生成
键盘

Case Time Limit:1000MS
Time Limit: 3000MS   Memory Limit: 65536K
Total Submissions: 28   Accepted: 17

Description

大家都知道,现在使用键盘的是下列字母:

qwertyuiop
asdfghjkl;
zxcvbnm,./

BSNY在联系盲打,但是有时候,他盲打会偏移一个,或者左偏或者右偏,如果左偏,比如BSNY想打f,实际按了d;反之,如果右偏,想打d,实际打了f。

为了方便,我们用L,R表示左偏和右偏。

给你BSNY打出来的字母,问BSNY原本想打的字母是什么?

Input

先输入L或R

然后一行字符

Output

输出BSNY原本想打的字符

Sample Input

 
 
 
R s;;upimrrfod;pbr

Sample Output

 
 
 
allyouneedislove

Hint

保证打的字符在上述键盘框内, 字符串长度小于10000

这是一道水题,就是模拟,但是读题要仔细啊,它给出的字符串是现在的,然后L,R代表的是他经过了什么变化而输出现在的字串的,然后叫你输出原来的字符串。

我的方法是分情况讨论,L,R,然后每次for一遍所有的键盘,然后再输出。

但是有更好的方法:(直接上代码)

#include<cstdio>
#include<cstring>
#include<string>
#include<iostream>
using namespace std;
int main(){
	string s = "qwertyuiopasdfghjkl;zxcvbnm,./";
	char d;
	cin >> d;
	string p;
	cin >> p;
	for (int i = 0; i < p.size(); i++) {
		int ch = s.find(p[i]);
		if (d=='L') cout << s[ch+1];
		else cout << s[ch-1];
	}
	cout<<endl;
	return 0;
}
它的思想就是把所有的都存进去,然后再在里面判断是L还是R,然后输出+1操作还是-1操作。

<

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值