首页 > 其他分享 >2024 蓝桥杯模拟赛 1 (div1) 题解

2024 蓝桥杯模拟赛 1 (div1) 题解

时间:2024-01-22 19:34:38浏览次数:21  
标签:2024 int 题解 hey 蓝桥 -- while solve left

A.

把字符串小写转换成大写即可

#include <bits/stdc++.h>
using namespace std;

void solve(){
    string s;cin>>s;
    for(int i=0;i<s.size();i++){
        if(s[i]>='a'&&s[i]<='z'){
            s[i]=(char)(s[i]-'a'+'A');
        }
    }
    cout<<s;
}

signed main(){
    int hey_left=1;
    //cin>>hey_left;
    while(hey_left--){
        solve();
    }
}

B.

用了substr()函数去找

#include <bits/stdc++.h>
using namespace std;

string s="chuanzhi";
void solve(){
    string t;cin>>t;
    int ans=0;
    for(int i=0;i<t.size();i++){
        if(t[i]==s[0]&&i+7<t.size()){
            if(t.substr(i,8)==s)ans++;
        }
    }
    cout<<ans;
}

signed main(){
    int hey_left=1;
    //cin>>hey_left;
    while(hey_left--){
        solve();
    }
}

C.

先判断给定的数字对于三种情况是否合法
但纯模没有全过,后来看题解
题解是直接暴力所有的合法日期,看是否出现这三个数字
确实妙

int main(){
	scanf("%d/%d/%d",&a,&b,&c);
	for(int i=19600101;i<=20591231;i++){//枚举日期的可取范围
		int y=i/10000,m=(i%10000)/100,d=i%100;//把日期分割年月日
		if(check(y,m,d)){//检查是否合法,然后判断是否满足题目条件
			if(y%100==a&&m==b&&d==c||
			   y%100==c&&m==a&&d==b||
			   y%100==c&&m==b&&d==a){
			   	printf("%d-%02d-%02d\n",y,m,d);
			   }
		}
	}
	return 0;
}

D.

先二分找到满足条件的一个值key
再从key一个个往上加,直到不满足条件得到最大值
从key一个个往下减,直到不满足条件得到最小值

#include <bits/stdc++.h>
using namespace std;

#define inf 0x3f3f3f3f3f3f3f3f
#define int long long
void solve(){
    int n;cin>>n;
    vector<pair<int,int>>a(n+1);
    for(int i=1;i<=n;i++)cin>>a[i].first>>a[i].second;
    int l=1,r=1000000000,mid;
    int mi=inf,ma=-inf;
    int key;
    while(l<=r){
        mid=(l+r)/2;
        bool mii=0,maa=0;
        for(int i=1;i<=n;i++){
                if (a[i].first / mid == a[i].second)continue;
                else if(a[i].first / mid > a[i].second){
                    maa=1;
                    break;
                }else if(a[i].first / mid < a[i].second){
                    mii=1;
                    break;
                }

        }
        if(mii==0&&maa==0){
            key=mid;
            break;
        }else if(mii){
            r=mid-1;
        }else if(maa){
            l=mid+1;
        }
    }
    int tmp=key;
    //cout<<"key="<<key<<'\n';
    while(1){
        tmp++;
        bool f=0;
        for(int i=1;i<=n;i++){
            if (a[i].first / tmp == a[i].second)continue;
            else {
                f=1;break;
            }
        }
        if(f){
            ma=tmp-1;
            break;
        }
    }
    tmp=key;
    while(1){
        tmp--;
        bool f=0;
        for(int i=1;i<=n;i++){
            if (a[i].first / tmp == a[i].second)continue;
            else {
                f=1;break;
            }
        }
        if(f){
            mi=tmp+1;
            break;
        }
    }
    cout<<mi<<' '<<ma;
}

signed main(){
    int hey_left=1;
    //cin>>hey_left;
    while(hey_left--){
        solve();
    }
}

E.

算术,模拟

#include <bits/stdc++.h>
using namespace std;

void solve(){
    int n;cin>>n;
    int ans=n;
    while(1){
        ans+=n/3;
        int yu=n%3;
        yu+=n/3;
        n=yu;
        if(n<3)break;
    }
    cout<<ans;
}

signed main(){
    int hey_left=1;
    //cin>>hey_left;
    while(hey_left--){
        solve();
    }
}

F.

二分

#include <bits/stdc++.h>
using namespace std;

void solve(){
    int n,k;cin>>n>>k;
    vector<pair<int,int>>a(n+1);
    for(int i=1;i<=n;i++)cin>>a[i].first>>a[i].second;
    int l=1,r=100000,mid;
    int ans=1;
    while(l<=r){
        mid=(l+r)/2;
        int cnt=0;
        for(int i=1;i<=n;i++){
            int h=a[i].first,w=a[i].second;
            cnt+=(h/mid)*(w/mid);
        }
        if(cnt>=k){
            l=mid+1;
            ans=max(ans,mid);
        }else r=mid-1;
    }
    cout<<ans;
}

signed main(){
    int hey_left=1;
    //cin>>hey_left;
    while(hey_left--){
        solve();
    }
}

G.

遍历,把瓶子放到该放的位置上即可

#include <bits/stdc++.h>
using namespace std;

void solve(){
    int n;cin>>n;
    vector<int>a(n+1);
    for(int i=1;i<=n;i++){
        cin>>a[i];
    }
    int ans=0;
    for(int i=1;i<=n;i++){
        if(a[i]==i)continue;
        else{
            ans++;
            int pos;
            for(int j=1;j<=n;j++){
                if(a[j]==i){
                    pos=j;
                    break;
                }
            }
            a[pos]=a[i];
            a[i]=i;
        }
    }
    cout<<ans;
}

signed main(){
    int hey_left=1;
    //cin>>hey_left;
    while(hey_left--){
        solve();
    }
}

H.

树状dp

#include <bits/stdc++.h>
using namespace std;

#define int long long
const int N=1e5+10;
int n;
int a[N];
vector<int>g[N];
int ans;
int dfs(int u,int fa){
    int sum=a[u];
    for(int i=0;i<g[u].size();i++){
        int y=g[u][i];
        if(y==fa)continue;
        sum+=max(0ll,dfs(y,u));
    }
    ans=max(ans,sum);
    return sum;
}
void solve(){
    cin>>n;
    for(int i=1;i<=n;i++)cin>>a[i];
    for(int i=1,u,v;i<n;i++){
        cin>>u>>v;
        g[u].push_back(v);
        g[v].push_back(u);
    }
    dfs(1,0);
    cout<<ans;
}

signed main(){
    int hey_left=1;
    //cin>>hey_left;
    while(hey_left--){
        solve();
    }
}

I.

串长-最长回文子串就是答案
最长回文子串=原串和颠倒串的最长公共子序列

#include <bits/stdc++.h>
using namespace std;

int dp[1010][1010];

void solve(){
    string s;cin>>s;
    int sz=s.size();
    s=" "+s;
    string t=" ";
    for(int i=s.size()-1;i>=1;i--){
        t.push_back(s[i]);
    }
    for(int i=1;i<s.size();i++){
        for(int j=1;j<t.size();j++){
            if(s[i]==t[j])dp[i][j]=dp[i-1][j-1]+1;
            else dp[i][j]=max(dp[i-1][j],dp[i][j-1]);
        }
    }
    cout<<(sz-dp[sz][sz]);
}

signed main(){
    int hey_left=1;
    //cin>>hey_left;
    while(hey_left--){
        solve();
    }
}

标签:2024,int,题解,hey,蓝桥,--,while,solve,left
From: https://www.cnblogs.com/wwww-/p/17980808

相关文章

  • 2024 省选联测部分题解
    目录目录R15T1树V图R15T2矩阵缺失题目:R15T3.R15T1树V图原题:SNOI2024D1T1.注意到答案肯定是形如每个连通块选一个点组成,把连通块缩起来后令\(dp_{u,x}\)表示连通块\(u\)选\(x\)的方案数,每次合并子树转移即可.因为只有\(n^2\)个合法点对所以时间复杂度......
  • 2024新版Windows 11要来了!16GB内存需求引热议 只是推荐配置
    最近,TrendForce集邦咨询的一份报告指出,微软已经将AIPC的内存基线设置为16GB。有媒体表示,这也意味着,新版Windows11的AI功能需要至少16GB内存才能运行。消息曝光后引发热议。对此,WC报道称,微软尚未就上述内存需求发表官方评论。16GB内存很可能只是微软的推荐配置,而非最低配置要求......
  • 如何备份已经安装并设置AutoHotkey脚本编程环境的Windows电脑系统分区 2024.01.22
     如何备份已经安装并设置AutoHotkey脚本编程环境的Windows电脑系统分区2024.01.22第1步:邮购并制作银灿IS903可启动U盘,量产Emulation-CD-ROM所用ISO镜像选用从www.firpe.cn下载的PE光盘镜像。第2步:正确安装电脑软件并调整电脑各项设置备份硬盘分区表和启动扇区信息转移个......
  • P10061 [SNOI2024] 矩阵
    原题链接考虑记录每个元素相邻的四个元素,发现每次旋转只会影响最周围一圈的点与旁边一圈点的连接,所以考虑十字链表维护,单次操作\(O(n)\)可以接受。矩阵加怎么做,我们还是采用上述的思路,在维护元素相邻的时候维护相邻两个元素的差值,这样可以\(O(n)\)矩阵加,因为还是只对最周围......
  • 阿里云云原生 2023 年度盘点,2024 携手开发者奔赴下一场山海
    ......
  • 阿里云云原生 2023 年度盘点,2024 携手开发者奔赴下一场山海
    ......
  • winter 2024 day1
    2024蓝桥杯模拟赛1(div1)  =.=^-^ A[蓝桥杯2021国BC]大写思路:小写转换大写#include<bits/stdc++.h>usingnamespacestd;#defineintlonglong//#defineint__int128#definedoublelongdoubletypedefpair<int,int>PII;typedefpair<string,int>PSI......
  • P10060 [SNOI2024] 树 V 图
    原题链接首先想到\(f\)值相同的点一定构成一个连通块,所以应当有\(k\)个连通块并且每个连通块\(f\)值互不相同。判断一下\([1,k]\)是否在\(f\)中都出现过,并且是否有\(k-1\)条边两个端点的\(f\)值不同,若有不符合的就是非法输入,直接输出\(0\)。考虑\(k=2\)的部分......
  • R语言包安装失败常见问题解决
    更改或指定镜像源出现这个问题很有可能是你现在用的镜像中未纳入这个包,一是可以多换个源试试。如:install.packages('package-name',repos='http://cran.us.r-project.org')或,在Rstudio中可以:或,命令行可直接指定Rstudio:install.packages('package_name',dependencies=TRUE......
  • 云原生周刊:Meshery v0.70 发布 | 2024.1.22
    开源项目推荐flux-cluster-template该项目用于部署由Flux、SOPS、GitHubActions、Renovate、Cilium等支持的Kubernetes集群,专注于使用GitOps实践和基础设施自动化。Kine该项目可以在MySQL、Postgres、SQLite、Dqlite等数据库上运行Kubernetes,而不是使用etcd。Kube......