noi题库 1.7 字符串
前九题
01:统计数字字符个数
总时间限制:
1000ms
内存限制:
65536kB
描述
输入一行字符,统计出其中数字字符的个数。
输入
一行字符串,总长度不超过255。
输出
输出为1行,输出字符串里面数字字符的个数。
样例输入
Peking University is set up at 1898.
样例输出
4
来源
习题(7-1) 医学部 2010 期末试题 樊波
#include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #include<algorithm>];int main() { ; gets(a); int l=strlen(a); ;i<l;i++) { ') sum++; } printf("%d",sum); ; }
02:找第一个只出现一次的字符
总时间限制:
1000ms
内存限制:
65536kB
描述
给定一个只包含小写字母的字符串,请你找到第一个仅出现一次的字符。如果没有,输出no。
输入
一个字符串,长度小于100000。
输出
输出第一个仅出现一次的字符,若没有则输出no。
样例输入
abcabd
样例输出
c
#include<iostream> #include<cstdio> #include<cstring>],b[];];int main() { gets(a); int l=strlen(a); ;i<l;i++) b[a[i]]++; ;i<l;i++) ) { printf("%c",a[i]); ; } printf("no"); ; }
03:基因相关性
总时间限制:
1000ms
内存限制:
65536kB
描述
为了获知基因序列在功能和结构上的相似性,经常需要将几条不同序列的DNA进行比对,以判断该比对的DNA是否具有相关性。
现比对两条长度相同的DNA序列。首先定义两条DNA序列相同位置的碱基为一个碱基对,如果一个碱基对中的两个碱基相同的话,则称为相同碱基对。接着计算相同碱基对占总碱基对数量的比例,如果该比例大于等于给定阈值时则判定该两条DNA序列是相关的,否则不相关。
输入
有三行,第一行是用来判定出两条DNA序列是否相关的阈值,随后2行是两条DNA序列(长度不大于500)。
输出
若两条DNA序列相关,则输出“yes”,否则输出“no”。
样例输入
0.85
ATCGCCGTAAGTAACGGTTTTAAATAGGCC
ATCGCCGGAAGTAACGGTCTTAAATAGGCC
样例输出
yes
#include<cstdio> #include<string> #include<iostream>using namespace std;int main() { double a; scanf("%lf",&a); ,len; double m; string s1,s2; cin>>s1; cin>>s2; int l1=s1.length(),l2=s2.length(); ) len=l1; else len=l2; ; i<len; i++) { if(s1[i]==s2[i]) { p++; } } m=1.0*p/len; if(m>=a) cout<<"yes"<<endl; else cout<<"no"<<endl; ; }
04:石头剪子布
总时间限制:
1000ms
内存限制:
65536kB
描述
石头剪子布,是一种猜拳游戏。起源于中国,然后传到日本、朝鲜等地,随着亚欧贸易的不断发展它传到了欧洲,到了近现代逐渐风靡世界。简单明了的规则,使得石头剪子布没有任何规则漏洞可钻,单次玩法比拼运气,多回合玩法比拼心理博弈,使得石头剪子布这个古老的游戏同时用于“意外”与“技术”两种特性,深受世界人民喜爱。
游戏规则:石头打剪刀,布包石头,剪刀剪布。
现在,需要你写一个程序来判断石头剪子布游戏的结果。
输入
输入包括N+1行:
第一行是一个整数N,表示一共进行了N次游戏。1 <= N <= 100。
接下来N行的每一行包括两个字符串,表示游戏参与者Player1,Player2的选择(石头、剪子或者是布):
S1 S2
字符串之间以空格隔开S1,S2只可能取值在{"Rock", "Scissors", "Paper"}(大小写敏感)中。
输出
输出包括N行,每一行对应一个胜利者(Player1或者Player2),或者游戏出现平局,则输出Tie。
样例输入
3
Rock Scissors
Paper Paper
Rock Paper
样例输出
Player1
Tie
Player2
提示
Rock是石头,Scissors是剪刀,Paper是布。混混谔谔
#include<cstdio> #include<string> #include<iostream>using namespace std;int main() { int n; cin>>n; ],b[]; ;i<n;i++) { cin>>a>>b; ]==]==]==]==]==]=='R') cout<<"Player1"<<endl; else ]==b[]) cout<<"Tie"<<endl; else cout<<"Player2"<<endl; } ; } #include<stdio.h> #include<string.h> ],b[]; int main() { int x,y,n; scanf("%d",&n); ;i<n;i++) { scanf("%s %s",a,b); ]==]=='S') printf("Player1\n"); ]==]=='P') printf("Player1\n"); ]==]=='R') printf("Player1\n"); ]==]=='S') printf("Player2\n"); ]==]=='P') printf("Player2\n"); ]==]=='R') printf("Player2\n"); ]==b[]) printf("Tie\n"); } ; }
哈希
哈希例题1
枚举循环节长度L
用哈希判断A[1…L],A[L+1…2L],A[2L+1…3L]……是否相等
最后一个循环节长度可能不足L,特殊判断
代码实现
//哈希例题1 #include <cstdio> #include <cstring> #define e 29LL #define mo 1000000007 #define N 100010 //定义常量 char s[N]; long long hash[N],hs,el; int n,i,L; bool flg; int main() { scanf();//下标是0到n-1; n = strlen(s+); ; i<=n; ++i) { hash[i] = (hash[i-]*e+(s[i]-))%mo; } el = ; ; L<=n; ++L) { el = el*e%mo; flg = true; ; i<n/L*L+; i+=L) { hs = (hash[i+L-]-hash[i-]*el%mo+mo)%mo; if (hs != hash[L]) { flg = false; break; } } if (flg) { ; i<=n; ++i) if (s[i] != s[i-n/L*L]) { flg = false; break; } if (flg) { printf("%d\n", L); break; } } } }
哈希例题2
在O(n)时间内,计算出一个字符串以每个位置为中心(一个字符或者字符间隙)最长能扩展出多长的回文串
代码实现
//哈希例题2 #include <cstdio> #include <cstring> #define N 100011 #define e 29 #define mo 1000000007 char s[N]; long long hs1[N],hs2[N],a[N],HS1,HS2,pow[N]; int i,n,m,l,r,mid; int main() { scanf(); n = strlen(s+); ; i<=n; ++i) { a[++m] = ; a[++m] = s[i]-; } a[++m] = ; ; i<=m; ++i) hs1[i] = (hs1[i-]*e+a[i])%mo; ; --i) hs2[i] = (hs2[i+]*e+a[i])%mo; pow[] = ; ; i<=m; ++i) pow[i] = pow[i-]*e%mo; ; i<=m; ++i) { l = ; < m-i) r = i-+; ; ) { mid = (l+r)/; HS1 = (hs1[i-]-hs1[i-mid-]*pow[mid]%mo+mo)%mo; HS2 = (hs2[i+]-hs2[i+mid+]*pow[mid]%mo+mo)%mo; if (HS1 == HS2) l = mid; else r = mid; } printf("%d\n", l); } }
05:输出亲朋字符串
编写程序,求给定字符串s的亲朋字符串s1。
亲朋字符串s1定义如下:给定字符串s的第一个字符的ASCII值加第二个字符的ASCII值,得到第一个亲朋字符; 给定字符串s的第二个字符的ASCII值加第三个字符的ASCII值,得到第二个亲朋字符;依此类推,直到给定字符串s的倒数第二个字符。亲朋字符串的最 后一个字符由给定字符串s的最后一个字符ASCII值加s的第一个字符的ASCII值。
输入
输入一行,一个长度大于等于2,小于等于100的字符串。字符串中每个字符的ASCII值不大于63。
输出
输出一行,为变换后的亲朋字符串。输入保证变换后的字符串只有一行。
样例输入
1234
样例输出
cege
代码实现
#include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> using namespace std; ],b[]; int main() { gets(a); int n=strlen(a); ;i<n-;i++) { b[i]=a[i]+a[i+]; printf("%c",b[i]); //printf("%c",a[i]+a[i+1]); } b[n-]=a[n-]+a[]; printf(]); //printf("%c",a[n-1]+a[0]); ; } /*#include<cstdio> #include<cstring> char a[110]; int main() { int n1 ,i; gets(a); n1=strlen(a); for(i = 0; i < n1-1;i++) { printf("%c",a[i]+a[i+1]); } printf("%c",a[n1-1]+a[0]); return 0; }*/
06:合法 C 标识符
描述
给定一个不包含空白符的字符串,请判断是否是C语言合法的标识符号(注:题目保证这些字符串一定不是C语言的保留字)。
C语言标识符要求:
1. 非保留字;
2. 只包含字母、数字及下划线(“_”)。
3. 不以数字开头。
输入
一行,包含一个字符串,字符串中不包含任何空白字符,且长度不大于20。
输出
一行,如果它是C语言的合法标识符,则输出yes,否则输出no。
样例输入
RKPEGX9R;TWyYcp
样例输出
no
代码实现
#include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> using namespace std; int main() { ]; cin>>a; int n=strlen(a); ]>=]<=]>=]<=]=='_') { ;i<n;i++) { '&&a[i]<'A'||a[i]>'Z'&&a[i]<'_'||a[i]>'_'&&a[i]<'a'||a[i]>'z') { cout<<"no"; ; } } } else { cout<<"no"; ; } cout<<"yes"; ; }
07:配对碱基数
脱氧核糖核酸(DNA)由两条互补的碱基链以双螺旋的方式结合而成。而构成DNA的碱基共有4种,分别为腺瞟呤(A)、鸟嘌呤(G)、胸腺嘧啶(T)和胞嘧啶(C)。我们知道,在两条互补碱基链的对应位置上,腺瞟呤总是和胸腺嘧啶配对,鸟嘌呤总是和胞嘧啶配对。你的任务就是根据一条单链上的碱基序列,给出对应的互补链上的碱基序列。
输入
一个字符串,表示一条碱基链。这个字符串只含有大写字母A、T、G、C,分别表示腺瞟呤、胸腺嘧啶、鸟嘌呤和胞嘧啶。字符串长度不超过255。
输出
一个只含有大写字母A、T、G、C的字符串,为与输入的碱基链互补的碱基链。
样例输入
ATATGGATGGTGTTTGGCTCTG
样例输出
TATACCTACCACAAACCGAGAC
代码实现
#include<iostream> #include<cstdio> #include<cstring> #include<cstdlib> #include<cmath> using namespace std; ]; int main() { gets(a); int n=strlen(a); ;i<n;i++) { if(a[i]=='G') printf("C"); if(a[i]=='C') printf("G"); if(a[i]=='A') printf("T"); if(a[i]=='T') printf("A"); } ; }
08:字符替换
描述
把一个字符串中特定的字符全部用给定的字符替换,得到一个新的字符串。
输入
只有一行,由一个字符串和两个字符组成,中间用单个空格隔开。字符串是待替换的字符串,字符串长度小于等于30个字符,且不含空格等空白符;
接下来一个字符为需要被替换的特定字符;
接下来一个字符为用于替换的给定字符。
输出
一行,即替换后的字符串。
样例输入
hello-how-are-you o O
样例输出
hellO-hOw-are-yOu
代码实现
#include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> using namespace std; ],x,y; int main() { cin>>a; cin>>x>>y; int n=strlen(a); ;i<n;i++) { if(a[i]==x) a[i]=y; } puts(a); ; }
09:密码翻译
描述
在情报传递过程中,为了防止情报被截获,往往需要对情报用一定的方式加密,简单的加密算法虽然不足以完全避免情报被破译,但仍然能防止情报被轻易的识别。我们给出一种最简的的加密方法,对给定的一个字符串,把其中从a-y,A-Y的字母用其后继字母替代,把z和Z用a和A替代,其他非字母字符不变,则可得到一个简单的加密字符串。
输入
输入一行,包含一个字符串,长度小于80个字符。
输出
输出每行字符串的加密字符串。
样例输入
Hello! How are you!
样例输出
Ifmmp! Ipx bsf zpv!
#include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> using namespace std; ],x,y; int main() { gets(a); int n=strlen(a); ;i<n;i++) { if(a[i]>='a'&&a[i]<='z'||a[i]>='A'&&a[i]<='Z') { if(a[i]=='z') a[i]='a'; else { if(a[i]=='Z') a[i]='A'; ; } } } puts(a); ; }
noi题库 1.7 字符串的更多相关文章
- noi 题库1.7字符串 第16至20题
16:忽略大小写的字符串比较 一般我们用strcmp可比较两个字符串的大小,比较方法为对两个字符串从前往后逐个字符相比较(按ASCII码值大小比较),直到出现不同的字符或遇到'\0'为止.如果全部字符 ...
- noi题库 1.7 字符串 10到第15题
10:简单密码 描述 Julius Caesar曾经使用过一种很简单的密码.对于明文中的每个字符,将它用它字母表中后5位对应的字符来代替,这样就得到了密文.比如字符A用F来代替.如下是密文和明文中字符 ...
- NOI题库 09:图像旋转翻转变换
NOI题库开始的题,也是略水,当然也是大水,所以彼此彼此 09:图像旋转翻转变换 总时间限制: 1000ms 内存限制: 65536kB 描述 给定m行n列的图像各像素点灰度值,对其依次进行一系列操作 ...
- NOI题库刷题日志 (贪心篇题解)
这段时间在NOI题库上刷了刷题,来写点心得和题解 一.寻找平面上的极大点 2704:寻找平面上的极大点 总时间限制: 1000ms 内存限制: 65536kB 描述 在一个平面上,如果有两个点( ...
- NOI题库 1768最大子矩阵 题解
NOI题库 1768最大子矩阵 题解 总时间限制: 1000ms 内存限制: 65536kB 描述 已知矩阵的大小定义为矩阵中所有元素的和.给定一个矩阵,你的任务是找到最大的非空(大 ...
- NOI题库-小学奥赛QwQ
今天Loli教育我们让我们来看看NOI题库的奥赛部分,不过,为何是小学的( ⊙ o ⊙ )啊!感觉智商被各种侮辱. 余数相同问题: 描述 已知三个正整数 a,b,c. 现有一个大于1的整数x,将其作为 ...
- noi题库(noi.openjudge.cn) 1.7编程基础之字符串T31——T35
T31 字符串P型编码 描述 给定一个完全由数字字符('0','1','2',-,'9')构成的字符串str,请写出str的p型编码串.例如:字符串122344111可被描述为"1个1.2个 ...
- noi题库(noi.openjudge.cn) 1.7编程基础之字符串T21——T30
T21:单词替换 描述 输入一个字符串,以回车结束(字符串长度<=100).该字符串由若干个单词组成,单词之间用一个空格隔开,所有单词区分大小写.现需要将其中的某个单词替换成另一个单词,并输出替 ...
- noi题库(noi.openjudge.cn) 1.8编程基础之多维数组T11——T20
T11 图像旋转 描述 输入一个n行m列的黑白图像,将它顺时针旋转90度后输出. 输入 第一行包含两个整数n和m,表示图像包含像素点的行数和列数.1 <= n <= 100,1 <= ...
随机推荐
- [CF912A]Tricky Alchemy
题意:你有a个黄水晶和b个蓝水晶,要求要x个黄水晶球(2黄),y个绿水晶球(1黄1蓝),z个蓝水晶球(3蓝),问还要多少水晶题解:模拟 C++ Code: #include<cstdio> ...
- 斜率dp+cdq分治
写在前面 这个东西应该是一个非常重要的套路......所以我觉得必须写点什么记录一下,免得自己忘掉了 一直以来我的斜率dp都掌握的不算很好......也很少主动地在比赛里想到 写这个的契机是noi.a ...
- [NOI2002] 银河英雄传说 (带权并查集)
题目描述 公元五八○一年,地球居民迁至金牛座α第二行星,在那里发表银河联邦创立宣言,同年改元为宇宙历元年,并开始向银河系深处拓展. 宇宙历七九九年,银河系的两大军事集团在巴米利恩星域爆发战争.泰山压顶 ...
- Codeforces Round #535 (Div. 3) 题解
Codeforces Round #535 (Div. 3) 题目总链接:https://codeforces.com/contest/1108 太懒了啊~好久之前的我现在才更新,赶紧补上吧,不能漏掉 ...
- Fragmenttabhost的使用教程
1.准备tab的图标,放到mipmap目录下面,大小64x64,准备2种,一种是选中的,一种是未选中的,如下图 2.重写fragmentabhost,防止调用fragment每次点击tab都要重新调用 ...
- Watto and Mechanism Codeforces Round #291 (Div. 2)
C. Watto and Mechanism time limit per test 3 seconds memory limit per test 256 megabytes input stand ...
- idea设置文件的编码格式
在打开某些类时会发现注释是乱码的,该如何解决idea的文件乱码呢?这就需要设置这个文件的合适编码格式: idea设置文件编码的两种方式分别如下: 第一种方式点击idea的右下角的图标如下图所示: 第二 ...
- com.mongodb.MongoException$CursorNotFound: cursor not found on server异常处理
java链接MongoDB处理大量数据时经常碰到cursor not found 的异常,其实是超时所致 Exception in thread "main" com.mongod ...
- 根据select创建input并赋值
<!DOCTYPE html><html> <head> <meta charset="UTF-8"> ...
- es6+最佳入门实践(10)
10.Generator 10.1.Generator是什么? Generator函数是ES6提供的一种异步编程解决方案.在它的内部封装了多个状态,因此,又可以理解为一种状态机,执行Generator ...