蓝桥杯习题做题记录
省赛题
第一题
小模拟。
难度:。
#include<bits/stdc++.h>
#define ll long long
#define ld long double
using namespace std;
//const int N=;
int h,s;
string str;
int main()
{
cin>>h>>s>>str;
for(int i=0;i<str.size();i++){
if(str[i]=='u'&&s>0) s--;
if(str[i]=='d'&&s<h) s++;
}
cout<<s;
return 0;
}
第二题
贪心+前缀和。
难度:。
#include<bits/stdc++.h>
#define ll long long
#define ld long double
using namespace std;
const int N=110;
int n,a[N],s[N],ans,mx;
int main()
{
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i]>>s[i];
s[i]+=s[i-1];
}
for(int i=1;i<=n;i++){
mx=1e9;
for(int j=1;j<=i;j++)
mx=min(mx,a[j]+s[i-1]-s[j-1]);
ans+=mx;
}
cout<<ans;
return 0;
}
第三题
模拟+乱搞。
难度:。
#include<bits/stdc++.h>
#define ll long long
#define ld long double
using namespace std;
const int N=1010;
int m,n,p,sum;
string s[N];
bool v[N];
struct asdf{
int w,id;
}a[10];
bool cmp(asdf x,asdf y){
if(v[x.id])
return 1;
if(v[y.id])
return 0;
return x.w<y.w;
}
int main()
{
cin>>m>>n;
for(int i=1;i<=n;i++){
cin>>s[i];
}
while(1){
for(int i=1;i<=m;i++)
a[i].id=i,a[i].w=0;
for(int i=1,j;i<=n;i++){
j=0;
while(v[s[i][j]-'0'])
j++;
a[s[i][j]-'0'].w++;
}
p=0;
sort(a+1,a+m+1,cmp);
for(int i=1;i<m;i++){
if(v[a[i].id])
continue;
if(!p){
p=a[i].w;
continue;
}
if(a[i].w!=p){
int j=i-1;
while(a[j].w==p&&!v[a[j].id]){
v[a[j].id]=1;
sum++;
j--;
}
break;
}
}
if(a[m].w==p){
cout<<(-p);
return 0;
}
if(a[m-1].w==p){
cout<<a[m].id;
return 0;
}
}
return 0;
}
第四题
背包板子+ 路径。
难度:。
#include<bits/stdc++.h>
#define ll long long
#define ld long double
using namespace std;
const int N=110;
int w,v,n,a[N],b[N],c[N],dp[N][N],f[N][N],mx,mi,mj;
void dfs(int x,int y){
if(!x||!y)
return;
dfs(x-a[f[x][y]],y-b[f[x][y]]);
cout<<f[x][y]<<" ";
}
int main()
{
cin>>w>>v>>n;
for(int i=1;i<=n;i++)
cin>>a[i]>>b[i]>>c[i];
for(int i=1;i<=n;i++)
for(int j=w;j>=a[i];j--)
for(int k=v;k>=b[i];k--)
if(dp[j-a[i]][k-b[i]]+c[i]>dp[j][k]){
dp[j][k]=dp[j-a[i]][k-b[i]]+c[i];
f[j][k]=i;
}
for(int i=1;i<=w;i++)
for(int j=1;j<=v;j++)
if(dp[i][j]>mx)
mx=dp[mi=i][mj=j];
cout<<mx<<endl;
dfs(mi,mj);
return 0;
}
第五题
搜索+拓补排序。
难度:。
#include<bits/stdc++.h>
#define ll long long
#define ld long double
using namespace std;
const int N=110;
int n,m,t,v[N*N],ans;
int fx[4]={1,-1,0,0};
int fy[4]={0,0,1,-1};
char c[N][N];
string s="LQBS";
struct asdf{
int hx,hy,tx,ty,in,mx;
}a[N*N];
vector<int>b[N][N];
void dfs(int hx,int hy,int x,int y,int now){
if(now==4){
a[++t].hx=hx;
a[t].hy=hy;
a[t].tx=x;
a[t].ty=y;
b[hx][hy].push_back(t);
return;
}
for(int i=0;i<4;i++){
int xx=x+fx[i],yy=y+fy[i];
if(xx>0&&xx<=n&&yy>0&&yy<=m&&c[xx][yy]==s[now])
dfs(hx,hy,xx,yy,now+1);
}
}
void topsort(){
queue<int>q;
int sum=0;
for(int i=1;i<=t;i++)
if(!a[i].in)
q.push(i);
while(!q.empty()){
int now=q.front();
q.pop();
sum++;
ans=max(ans,a[now].mx);
for(int i=0;i<4;i++){
int xx=a[now].tx+fx[i],yy=a[now].ty+fy[i];
if(xx<1||xx>n||yy<1||yy>m)
continue;
for(int k=0;k<b[xx][yy].size();k++){
a[b[xx][yy][k]].in--;
if(!a[b[xx][yy][k]].in)
q.push(b[xx][yy][k]);
a[b[xx][yy][k]].mx=max(a[b[xx][yy][k]].mx,a[now].mx+1);
}
}
}
if(sum<t){
cout<<-1<<endl;
exit(0);
}
}
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
cin>>c[i][j];
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
if(c[i][j]==s[0])
dfs(i,j,i,j,1);
for(int i=1;i<=t;i++){
for(int j=0;j<4;j++){
int xx=a[i].tx+fx[j],yy=a[i].ty+fy[j];
if(xx<1||xx>n||yy<1||yy>m)
continue;
for(int k=0;k<b[xx][yy].size();k++)
a[b[xx][yy][k]].in++;
}
a[i].mx=1;
}
topsort();
cout<<ans<<endl;
return 0;
}
模拟二:STEMA 考试选择题模拟练习试卷(中级组)
第一部分
。
第二部分
。
第三部分
。
第四部分
。
第五部分
。
第六部分
。
第七部分
。
第八部分
。
模拟十:STEMA 考试编程题 C++模拟练习试卷(中级组)
编程第一题
#include<bits/stdc++.h>
#define ll long long
#define ld long double
using namespace std;
//const int N=;
int n;
int main(){
cin>>n;
cout<<n%2;
return 0;
}
编程第二题
#include<bits/stdc++.h>
#define ll long long
#define ld long double
using namespace std;
//const int N=;
int n,ans;
int main(){
cin>>n;
for(int i=1;i<=n;i++)
for(int j=0;j<=n;j++)
for(int k=1;k<=n;k+=2)
if(i!=j&&j!=k&&i!=k)
ans++;
cout<<ans;
return 0;
}
编程第三题
#include<bits/stdc++.h>
#define ll long long
#define ld long double
using namespace std;
const int N=610;
int n,head[N],nxt[N],now,k;
int main(){
cin>>n;
for(int i=1;i<n;i++)
nxt[i]=i+1;
k=now=nxt[n]=1;
for(int i=2;i<=n;i++)
head[i]=i-1;
head[1]=n;
int p=0;
while(nxt[now]!=now){
now=nxt[now];
k++;
if(k>2){
k=1;
head[nxt[now]]=head[now];
now=nxt[head[now]]=nxt[now];
}
}
cout<<now;
return 0;
}
编程第四题
//现在是2020年11月31日
#include<bits/stdc++.h>
#define ll long long
#define ld long double
using namespace std;
//const int N=;
int y,m,d,ans,ny=2020,nm=12,nd=1;
int month[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int qy(int sm,int sd,int tm,int td){
int ans=0;
for(int i=sm;i<=tm;i++){
int mx=month[i],mi=1;
if(i==sm)
mi=sd;
if(i==tm)
mx=td;
ans+=mx-mi+1;
}
return ans;
}
int main(){
cin>>y>>m>>d;
if(y==2020){
cout<<qy(nm,nd,m,d)<<endl;
return 0;
}
ans=qy(nm,nd,12,31)+(y-1-ny)/4*1461;
for(int i=1;i<=(y-1-ny)%4;i++)
ans+=365+((ny+i)%400==0||((ny+i)%100&&(ny+i)%4==0));
ans+=qy(1,1,m,d);
cout<<ans<<endl<<'*'<<1+ans%7<<endl;
return 0;
}
编程第五题
#include<bits/stdc++.h>
#define ll long long
#define ld long double
using namespace std;
//const int N=;
int f,n,ans;
string str(int x,bool f){
string s="";
while(x){
s=char(x%10+'0')+s;
x/=10;
}
if(s.size()<2&&f)
s='0'+s;
return s;
}
void pd(string s){
string a="";
bool f=1;
for(int i=0;i<s.size();i++)
a=s[i]+a;
for(int i=0;i<s.size();i++){
if(s[i]=='1'&&a[i]=='1')
continue;
if(s[i]=='8'&&a[i]=='8')
continue;
if(s[i]=='0'&&a[i]=='0')
continue;
if(s[i]=='6'&&a[i]=='9')
continue;
if(s[i]=='9'&&a[i]=='6')
continue;
f=0;
}
if(f)
ans++;
}
int main(){
cin>>f>>n;
for(int i=1;i<=f;i++)
for(int j=1;j<=n;j++)
pd(str(i,0)+str(j,1));
cout<<ans;
return 0;
}
本文作者:luckydrawbox
本文链接:https://www.cnblogs.com/luckydrawbox/p/18526654
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步