2024 蓝桥杯模拟赛3(div1+div2)
2024 蓝桥杯模拟赛3(div1+div2)
P8834 [传智杯 #3 决赛] 序列
简单的模拟,数据范围很小,暴力即可
点击查看代码
#include <bits/stdc++.h> using namespace std; typedef long long ll; const int N=1e5+5; void solve() { ll n,k,a[N],cnt=0; cin>>n>>k; for(int i=1;i<=n;i++) cin>>a[i]; for(int i=1;i<=n;i++) { for(int j=i+1;j<=n;j++){ if(i<j&&a[i]*a[j]<=k) cnt++; } } cout<<cnt; } int main() { int t=1; while(t--) { solve(); } return 0; }
P8780 [蓝桥杯 2022 省 B] 刷题统计
把一周作为一个周期,然后分类讨论总量除以周期量以后剩余的题数是小于五天的量,还是大于五天的量,也是简单的模拟
点击查看代码
#include <bits/stdc++.h> using namespace std; void solve(){ long long n,m,t,k,ans,h; cin>>n>>m>>t; k=5*n+2*m;//一个周期的刷题量 h=t-(k*(t/k));//除完以后剩余的刷题量 if(h<=5*n) ans=7*(t/k)+ceil(1.0*h/n); else if(h>5*n) ans=7*(t/k)+ceil(1.0*(h-5*n)/m)+5; cout<<ans; } int main() { int t=1; while(t--) { solve(); } return 0; }
P8623 [蓝桥杯 2015 省 B] 移动距离
同样是一题简单的模拟题,最短距离就是两个点行和行的差值+列和列的值,蛇形排列注意推导一下奇数行和偶数行的点的列数即可
点击查看代码
#include <bits/stdc++.h> using namespace std; void solve() { int w,n,m,r1,c1,r2,c2,ans;//r为行数,c为列数 cin>>w>>n>>m; r1=ceil(1.0*n/w); r2=ceil(1.0*m/w); if(r1%2==0){//偶数行的点的列数 c1=r1*w+1-n; } else c1=n-w*(r1-1); if(r2%2==0){//奇数行的点的列数 c2=r2*w+1-m; } else c2=m-w*(r2-1); cout<<abs(r1-r2)+abs(c1-c2); } int main() { int t=1; while(t--) { solve(); } return 0; }
P8738 [蓝桥杯 2020 国 C] 天干地支
我们从题目给的2020年为基准,重新打表一套新的天干地支,2020%10==0所以天干从geng开始,2020%12=4所以zi在第五个位置,学习更换基准的思想有些题目可以事半功倍
点击查看代码
#include<bits/stdc++.h> using namespace std; string a[10] = { "geng","xin","ren","gui","jia","yi","bing","ding","wu","ji" };//天干 string b[12] = { "shen","you","xu","hai","zi","chou","yin","mao","chen","si","wu","wei" }; void solve() { int n; cin>>n; cout<<a[n%10]<<b[n%12]; } int main() { int t=1; while(t--) { solve(); } return 0; }
P8635 [蓝桥杯 2016 省 AB] 四平方和
暴力枚举四层循环会超时,所以我们可以考虑枚举三个数,看第四个数是不是完全平方数,(int)sqrt(第四个数) 然后让这个平方看等不等于这第四个数,在枚举三个数的过程中我们假设i,j,k,i×i<n, i×i+j×j<n, i×i+j×j+k×k<n,这是每层循环的范围
点击查看代码
#include <bits/stdc++.h> using namespace std; void solve() { int n; cin>>n; for(int i=0;i*i<n;i++) { for(int j=i;i*i+j*j<n;j++) { for(int k=j;i*i+j*j+k*k<n;k++) { int m=n-i*i-j*j-k*k; int h=(int)sqrt(m); if(h*h==m){ cout<<i<<" "<<j<<" "<<k<<" "<<h; return ; } } } } } int main() { int t=1; while(t--) { solve(); } return 0; }
P8697 [蓝桥杯 2019 国 C] 最长子序列
从要查找的第一个字母开始去遍历母字符串,找到后用pos更新起点,然后看是否可以找完,如果一个字母已经让这个位置更新到了末尾就没有结果
点击查看代码
#include <bits/stdc++.h> using namespace std; void solve() { string s1,s2; int cnt=0; int pos=0; cin>>s1; cin>>s2; for(int i=0;i<s2.size();i++) { for(int j=pos;j<s1.size();j++) { if(s2[i]==s1[j]){ pos=j+1; cnt++; break;//找到就跳出 找下一个 } if(j==s1.size()-1){//这个字母找不到勒 cout<<cnt; return; } } } cout<<cnt; } int main() { int t=1; while(t--) { solve(); } return 0; }
P8654 [蓝桥杯 2017 国 C] 合根植物
这是一题并查集的模板题,学习一下并查集的基础就会了
点击查看代码
#include <bits/stdc++.h> using namespace std; const int N=1e6+10; int p[N]; int find(int x)//朴素并查集模板 { if(p[x]!=x) p[x]=find(p[x]); return find(p[x]); } void solve() { int n,k,a,b,m,ans; cin>>n>>k; for(int i=1;i<=n*k;i++) p[i]=i;//初始化并查集 cin>>m; for(int i=1;i<=m;i++) { cin>>a>>b; p[find(a)]=find(b);//合并a,b所在的两个集合 } for(int i=1;i<=n*k;i++){ if(i==p[i]) ans++;//看有几个集合 } cout<<ans; } int main() { solve(); }
P8692 [蓝桥杯 2019 国 C] 数正方形
进行如图的推断得出规律
题解代码,注意取余那一步
点击查看代码
#include <bits/stdc++.h> #define int long long const int mod=1e9+7; using namespace std; void solve() { int n,sum=0; cin>>n; for(int i=1;i<=n-1;i++) { sum+=(n-i)*(n-i)*i; sum%=mod;};//这一步不能写出sum+=(n-i)^2%mod; cout<<sum; } signed main() { solve(); }
点击查看代码
posted on 2024-03-01 16:52 swj2529411658 阅读(43) 评论(0) 编辑 收藏 举报
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)