9 条题解
-
3
很显然,连楼下说的翻转函数也不需要使用
真男人不会在无谓的地方浪费时间/dogecin>>s; short len=s.length(); // 计算字符串长度,降低时间复杂度 for(short i=0;i<len/2+1;i++){ // 只判断到字符串中间就行了,降低时间复杂度 if(a[i]!=a[len-i-1]){ // 判断首尾是否相等 cout<<"NO"; // 当有一个字符没有回文时就可以直接停止程序了,降低时间复杂度 return 0; } } cout<<"YES"; // 如果不是回文,必然会输出no并结束程序,程序能运行到这里说明必然回文 return 0;
-
1
这道题用reverse函数会更快,用结构体代码太长了,所以我这里就用结构体啦!
#include <bits/stdc++.h> #define maxn 1000005 using namespace std; string s; bool pd(string s){//定义结构体 int i,cnt=s.size(); for(int i=0;i<=cnt/2;i++){//判断 if(s[i]!=s[cnt-i-1]) return false;//返回false } return true;//返回true } int main(){ cin>>s;//输入 if(pd(s)) cout<<"YES"; else cout<<"NO"; }
-
0
基因序列 题目背景
据诺贝尔奖官网最新消息,当地时间10月7日,瑞典皇家科学院在斯德哥尔摩宣布,2020年诺贝尔化学奖“花落”法国生物化学家埃玛纽埃尔·沙尔庞捷(EmmanuelleCharpentier)和美国化学家珍妮弗·杜德纳(JenniferA. Doudna),以表彰这两位女性科学家“发现了基因编辑技术中最有力的工具之一:CRISPR /cas9基因剪刀”,她们将分享1000万瑞典克朗(约760万元人民币)的奖金。
她们的研究为在人体以及其他动物细胞上实现基因编辑奠定了重要基础。诺贝尔委员会在官方颁奖词中表示:“借助这些技术,研究人员可以非常精准地改变动物、植物、和微生物的DNA。CRISPR /cas9基因剪刀彻底改变了分子生命科学,为植物育种带来了新机遇,有望催生创新性癌症疗法,并可能使治愈遗传性疾病这一人类梦想美梦成真。”
CRISPR基因编辑系统的故事还要从一座名为圣波拉(Santa Pola)的地中海小城说起。30年前,一位名为Francisco Mojica的年轻人在当地的一所大学开始攻读博士学位,而他的研究对象,就是圣波拉海滩上发现的一种古细菌。
在分析这种古细菌的DNA序列时,年轻的Mojica观察到了一个有趣的现象——这些微生物的基因组里,存在许多奇怪的“回文”片段。这些片段长30个碱基,而且会不断重复。在两段重复之间,则是长约36个碱基的间隔。对于这种具有规律性的重复,Mojica后来给它起了一个拗口的名字“常间回文重复序列簇(Clustered Regularly Inter-Spaced Palindromic Repeats)。不过它的缩写好记多了,它就是CRISPR。 题目描述
我们这个问题主要关注的是 “回文” 这个概念,一个DNA片段是“回文”的,当且仅当这段DNA片段正着念和反着念是一样的。
现在科学家从一段DNA序列中读取除了其中一条单链的信息(我们用一个长度不超过 1000的字符串来表示这条单链),请你根据这条单链判断这段DNA序列是不是“回文”的。 输入格式
输入共一行,包含一个长度不超过 1000 的字符串,表示DNA序列的一条单链。(输入保证字符串只包含A、G、C、T)。 输出格式
如果这个字符串是“回文”的,输出“YES”;否则,输出“NO”。 样例
输入数据 1
AGCTAGCTAGCT
输出数据 1
NO
输入数据 2
AGCTAGCTCGATCGA
输出数据 2
YES
数据范围
对于 100% 的数据:字符串长度不超过 1000 且只包含字符 'A'、'G'、'C'、'T'。
思路分析 这题其实去除不用的条件,就是一道给我们求回文的题。我是先用reverse函数对其进行一个反转,在判断反转前后的区别,一样就输出"YES",否则输出"NO"。
核心代码
string a; cin >> a; string b = a; reverse(b.begin(), b.end());//反转字符串 if(a == b) { cout << "YES"; } else { cout << "NO"; }
请各位保持独立思考,不要抄袭代码!!
-
0
此题十分简单。
很明显,由于
当且仅当这段DNA片段正着念和反着念是一样的
所以我们只要翻转字符串,然后判断翻转前后字符串是否一致即可判断原串是否为回文字符串。
翻转函数(stl)
reverse(起始地址,结束地址)
而字符串a的开头和结尾地址显然是:
a.begin()
和
a.end()
那实现就很明显了。
string a,b; int main(){ cin>>a; b = a;/*a.length()<=1000,所以没问题 reverse(a.begin(),a.end());//翻转 if(a!=b)//!=,不等于 cout<<"NO"; else cout<<"YES"; return 0; }
内置防抄袭。请勿抄袭题解。
-
-14
写题解请注意 鼓励大家写题解,但注意题解格式。
题解一定要有思路解析或代码注释,能否让别人理解你的思路
也是你的能力的检验,不要只放无意义的代码给大家复制,那就失去了做题的初心。
给代码两端加上这个会舒服一些
```cpp
你的代码
```
</span>
这个点在键盘的左上角tab上面那个键,注意切换输入法
#include<iostream> using namespace std; int main() { int n; cin>>n;//这是一个注释 return 0; }
请注意严禁抄袭题解,写题解不要只放代码,需加上你的思路或代码注释。
抄袭题解一经发现直接取消成绩。
题解被删除的可能
- 代码不符合格式规范
- 没有思路讲解或者没有注释,
- 无意义的题解
大家携手共同维护一个良好的编程环境,如果一经发现,多次作乱。可能会被管理员拉黑,请注意,一旦拉黑即失去登陆资格。
- 1
信息
- ID
- 1237
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 5
- 标签
- 递交数
- 602
- 已通过
- 247
- 上传者