PAT (Advanced Level) Practice 1035 Password (20 分) 凌宸1642

题目描述:

To prepare for PAT, the judge sometimes has to generate random passwords for the users. The problem is that there are always some confusing passwords since it is hard to distinguish 1 (one) from l (L in lowercase), or 0 (zero) from O (o in uppercase). One solution is to replace 1 (one) by @, 0 (zero) by %, l by L, and O by o. Now it is your job to write a program to check the accounts generated by the judge, and to help the judge modify the confusing passwords.

译:为了准备 PAT , 裁判们有时候不得不为用户生成随机的密码。这样的问题就是经常会出现许多混乱的密码,因为很难区分 1(1) 和 l (L 的小写) , 0 (0) 和O (o 的大写)。一种解决办法就是用 @ 代替 1% 代替 0 , L 代替 l , O代替 o。现在你的任务就是写一个程序检查裁判生成的账号,并帮助裁判修改这混乱的密码。


Input Specification (输入说明):

Each input file contains one test case. Each case contains a positive integer N (≤1000), followed by N lines of accounts. Each account consists of a user name and a password, both are strings of no more than 10 characters with no space.

译:每个输入文件包含一个测试用例,每个用例包含一个正整数 N (≤1000), 紧跟着 N 行账号。每个账号包含一个 用户名 和一个密码,并且都是不超过十个字符并且不含空白符的字符串


Output Specification (输出说明):

For each test case, first print the number M of accounts that have been modified, then print in the following M lines the modified accounts info, that is, the user names and the corresponding modified passwords. The accounts must be printed in the same order as they are read in. If no account is modified, print in one line There are N accounts and no account is modified where N is the total number of accounts. However, if N is one, you must print There is 1 account and no account is modified instead.

译:对于每个测试用例,第一行输出被修改过的账号的数量 M,然后接下来 M 行打印修改过的账号信息,也就是说,用户名对应的修改过的密码。账号的输出顺序必须和输入顺序一致。如果没有账号被修改,在一行中打印 There are N accounts and no account is modified 其中 N 表示 账号的总数。但是,如果 N 等于 1的话,你必须输出 There is 1 account and no account is modified


Sample Input 1 (样例输入1):

3
Team000002 Rlsp0dfa
Team000003 perfectpwd
Team000001 R1spOdfa

Sample Output 1 (样例输出1):

2
Team000002 RLsp%dfa
Team000001 R@spodfa

Sample Input 2 (样例输入2):

1
team110 abcdefg332

Sample Output 2 (样例输出2):

There is 1 account and no account is modified

Sample Input 3 (样例输入3):

2
team110 abcdefg222
team220 abcdefg333

Sample Output 3 (样例输出3):

There are 2 accounts and no account is modified

The Idea:

设计到字符串,由于需要存储一个 name - passwd 的键值对, 本来首选是使用 map 来进行键值对的处理,但是map会自动排序,与要求输出顺序需要喝输入顺序不同相矛盾,故采取了用 vector来存储 pair 类型数据。值得注意的是,题目中明确说明了 n = 1 和 n != 1的时候的情况输出是不同的,特别注意 are 和 is 还有 account 和 accounts 这里有坑(测试点2) .


The Codes:

#include<bits/stdc++.h>
using namespace std ;
string name , passwd1 , passwd2 ;
int n ;
vector<pair<string , string> > ans ; // 利用 pair 捆绑 name 和 passwd
string modify(string s){
string str = "" ;
for(int i = 0 ; i < s.size() ; i ++){
if(s[i] == '1') str += '@' ; // 如果是 1 替换成 @
else if(s[i] == '0') str += '%' ; // 如果是 0 替换成 %
else if(s[i] == 'l') str += 'L' ; // 如果是 l 替换成 L
else if(s[i] == 'O') str += 'o' ; // 如果是 O 替换成 o
else str += s[i] ; // 其他的直接连接
}
return str ;
}
int main(){
scanf("%d" , &n) ;
for(int i = 0 ; i < n ; i ++){
cin >> name >> passwd1 ;
passwd2 = modify(passwd1) ;
if(passwd1 != passwd2) ans.push_back(make_pair(name , passwd2)) ;// 修改的加入向量
}
if(ans.size() == 0){
if( n == 1) printf("There is 1 account and no account is modified\n") ;
else printf("There are %d accounts and no account is modified\n" , n) ;
}else{
printf("%d\n" , ans.size()) ;
for(int i = 0 ; i < ans.size() ; i ++)
printf("%s %s\n" , (ans[i].first).c_str() , (ans[i].second).c_str()) ;
}
return 0;
}

PAT (Advanced Level) Practice 1035 Password (20 分) 凌宸1642的更多相关文章

  1. PAT (Advanced Level) Practice 1008 Elevator (20 分) 凌宸1642

    PAT (Advanced Level) Practice 1008 Elevator (20 分) 凌宸1642 题目描述: The highest building in our city has ...

  2. PAT (Advanced Level) Practice 1035 Password (20 分)

    To prepare for PAT, the judge sometimes has to generate random passwords for the users. The problem ...

  3. PAT (Advanced Level) Practice 1008 Elevator (20 分) (模拟)

    The highest building in our city has only one elevator. A request list is made up with N positive nu ...

  4. PAT (Advanced Level) Practice 1046 Shortest Distance (20 分) 凌宸1642

    PAT (Advanced Level) Practice 1046 Shortest Distance (20 分) 凌宸1642 题目描述: The task is really simple: ...

  5. PAT (Advanced Level) Practice 1042 Shuffling Machine (20 分) 凌宸1642

    PAT (Advanced Level) Practice 1042 Shuffling Machine (20 分) 凌宸1642 题目描述: Shuffling is a procedure us ...

  6. PAT (Advanced Level) Practice 1041 Be Unique (20 分) 凌宸1642

    PAT (Advanced Level) Practice 1041 Be Unique (20 分) 凌宸1642 题目描述: Being unique is so important to peo ...

  7. PAT (Advanced Level) Practice 1031 Hello World for U (20 分) 凌宸1642

    PAT (Advanced Level) Practice 1031 Hello World for U (20 分) 凌宸1642 题目描述: Given any string of N (≥5) ...

  8. PAT (Advanced Level) Practice 1027 Colors in Mars (20 分) 凌宸1642

    PAT (Advanced Level) Practice 1027 Colors in Mars (20 分) 凌宸1642 题目描述: People in Mars represent the c ...

  9. PAT (Advanced Level) Practice 1023 Have Fun with Numbers (20 分) 凌宸1642

    PAT (Advanced Level) Practice 1023 Have Fun with Numbers (20 分) 凌宸1642 题目描述: Notice that the number ...

随机推荐

  1. how to remove git commit history

    how to remove git commit history 如何删除 GitHub 仓库的历史数据 git filter-branch remove GitHub git commit hist ...

  2. linux & node & cli & exit(0) & exit(1)

    linux & node & cli & exit(0) & exit(1) exit(0) & exit(1) demo exit(0) === OK exi ...

  3. scrollTo & js auto scroll & scrollX & scrollY

    scrollTo & js auto scroll & scrollX & scrollY scrollX & scrollY 获取 scroll top height ...

  4. taro css 转换 bug

    taro css 转换 bug https://nervjs.github.io/taro/docs/size.html https://nervjs.github.io/taro/docs/comp ...

  5. NGK Global英国路演落下帷幕,区块链赋能大数据取得新突破

    NGK全球巡回路演于7月25日在英国圆满举行,此次路演是由NGK英国社区主办,旨在探讨当前大数据爆炸的形式下,区块链如何赋能,解决行业痛点.会上,行业精英.区块链爱好者.各实体产业代表以及科技人员纷纷 ...

  6. 「NGK每日快讯」2021.1.7日NGK第65期官方快讯!

  7. React Native选择器组件-react-native-slidepicker

    react-native-slidepicker 一个纯 JavaScript 实现的的 React Native 组件,用于如地址,时间等分类数据选择的场景. github: https://git ...

  8. Java魔法类:Unsafe应用解析

    本文转载自Java魔法类:Unsafe应用解析 前言 Unsafe是位于sun.misc包下的一个类,主要提供一些用于执行低级别.不安全操作的方法,如直接访问系统内存资源.自主管理内存资源等,这些方法 ...

  9. web项目中各工具的作用

    一.HTML:用于搭建基础网页,展示网页的内容 Hyper Text Markup Language 超文本标记语言 ,是最基础的网页开发语言. * 超文本: * 超文本是用超链接的方法,将各种不同空 ...

  10. Docker Elasticsearch 集群配置

    一:选用ES原因 公司项目有些mysql的表数据已经超过5百万了,各种业务的查询入库压力已经凸显出来,初步打算将一个月前的数据迁移到ES中,mysql的老数据就物理删除掉. 首先是ES使用起来比较方便 ...