博主介绍: 27dCnc
专题 : 数据结构帮助小白快速入门
☆*: .。. o(≧▽≦)o .。.:*☆
#include
using namespace std;
int main(){
int a[100];
int count=0;//41
int all=0;//63
int s=0;
int e=0;
for(int i=1;i<=8;i++){
cin>>a[i];
if(a[i]>=118){
s++;
}
if(a[i]>=63){
all++;
}
if(a[i]>=41){
count++;
}
}
if(s>0){
cout<<10;
}else if(all>=4){
cout<<8;
}else if(count>=4){
cout<<3;
}else{
cout<<1;
}
}
思路: 概率情况从小到大,这个样子一些情况就会被覆盖
代码
思路分析:
根据题目的意思,我们不难求出以下两个数值:
但是知道了得到了满分的题目一共有多少分,如何用其,以及非满分的题目的个数去计算出结果呢?这一关键在于“循环枚举”的思想,即利用计算机较高的运行速度,使用循环结构去计算出最后的答案。
那对于这一道题目我们如何利用到这个思想求解呢?我们可以枚举有多少题目获得了一半分。假设是有 i 道题目获得了一半的分数,则有:
获得了一半的分数的题目,加起来一共有 1/2×1e7/n×*i*
核心代码
代码
#include
#include
#include
using namespace std;
void QAQ(){
int m;
int count=0;
int q=0;
cin>>m;
string s;
cin>>s;
string s1=s;
reverse(s.begin(),s.end());
// cout<
// cout<
for(int i=0;i<m;i++){
if(s[i]=='A'&&s1[i]=='T'){
q+=(i+1);
count++;
}
if(s[i]=='C'&&s1[i]=='G'){
q+=(i+1);
count++;
}
if(s[i]=='T'&&s1[i]=='A'){
q+=(i+1);
count++;
}
if(s[i]=='G'&&s1[i]=='C'){
q+=(i+1);
count++;
}
}
if(count){
cout<<q<<"\n";
}
else{
cout<<0<<"\n";
}
}
int main(){
int n;
cin>>n;
while(n--) QAQ();
}
思路:
统计计数 对DNA统计因为DNA是对称的所以(i+1)因为出现一次说明有两次非被检测到匹配字符串通过统计来计数
思路 :
- 通过
unique()
来将重复的元素移动到后面- 然后通过
lower_bound()
来确定左边的范围- 然后通过
lupper_bound()
来确定右边的范围
代码:
#include
#define ll long long
using namespace std;
ll x[600000];
int main(){
ll n,Q;
cin>>n>>Q;
for(int i=1;i<=n;i++){
int a,b,c;
scanf("%dx%d=%d",&a,&b,&c);
x[i]=(c-b)/a;
}
sort(x+1,x+n+1);
ll nx=unique(x+1,x+n+1)-x-1;
while(Q--){
ll L,R;
cin>>L>>R;
ll L1=lower_bound(x+1,x+nx+1,L)-x-1;
ll R1= upper_bound(x+1,x+nx+1,R)-x-1;
cout<<R1-L1<<"\n";
}
return 0;
}
如果此文对你有帮助的话,欢迎关注、点赞、⭐收藏、✍️评论,支持一下博主~