ACM题解Day2|1.台风, 2.式神考试,3.DNA,4.方程求解

发布时间:2024年01月22日

学习目标:

博主介绍: 27dCnc
专题 : 数据结构帮助小白快速入门
👍👍👍👍👍👍👍👍👍👍👍👍
☆*: .。. o(≧▽≦)o .。.:*☆

Github今日打卡
在这里插入图片描述

  • ACM题解

学习内容:

1.台风

题目
在这里插入图片描述
代码

#include <bits/stdc++.h>
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;
    }

}

思路: 概率情况从小到大,这个样子一些情况就会被覆盖

2.式神考试

题目
在这里插入图片描述

代码

在这里插入图片描述

思路分析:
根据题目的意思,我们不难求出以下两个数值:

  • 得到了满分的题一共有 n?m 道;
  • 得到了满分的题目,加起来一共有 1e7 x (n - m) / n 分

但是知道了得到了满分的题目一共有多少分,如何用其,以及非满分的题目的个数去计算出结果呢?这一关键在于“循环枚举”的思想,即利用计算机较高的运行速度,使用循环结构去计算出最后的答案。

那对于这一道题目我们如何利用到这个思想求解呢?我们可以枚举有多少题目获得了一半分。假设是有 i 道题目获得了一半的分数,则有:

				获得了一半的分数的题目,加起来一共有  1/2×1e7/n×*i* 

在这里插入图片描述

在这里插入图片描述
图解 :

在这里插入图片描述
在这里插入图片描述

核心代码

在这里插入图片描述

3.DNA

题目
在这里插入图片描述

代码

#include <iostream>
#include<string>
#include<algorithm>
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<<s<<"\n";
    // cout<<s1<<"\n";
    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)因为出现一次说明有两次非被检测到匹配字符串通过统计来计数

4.方程求解

题目
在这里插入图片描述

思路 :

  • 通过unique()来将重复的元素移动到后面
  • 然后通过lower_bound()来确定左边的范围
  • 然后通过lupper_bound()来确定右边的范围

代码:

#include<bits/stdc++.h>
#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;
}

学习时间:

  • 周一至周五晚上 7 点—晚上9点
  • 周六上午 9 点-上午 11 点
  • 周日下午 3 点-下午 6 点

学习产出:

  • 技术笔记 2 遍
  • CSDN 技术博客 3 篇
  • 习的 vlog 视频 1 个

🔥如果此文对你有帮助的话,欢迎💗关注、👍点赞、?收藏、??评论,支持一下博主~

文章来源:https://blog.csdn.net/2303_79299383/article/details/135737691
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。