蓝桥杯习题做题记录

省赛题

第一题

小模拟。

难度:入门\color{#FE4C61}\text{入门}

#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;
}

第二题

贪心+前缀和。

难度:入门\color{#FE4C61}\text{入门}

#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;
}

第三题

模拟+乱搞。

难度:普及-\color{#F39C11}\text{普及-}

#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;
}

第四题

背包板子+ dpdp 路径。

难度:普及/提高-\color{#FFC116}\text{普及/提高-}

#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;
}

第五题

搜索+拓补排序。

难度:普及+/提高\color{#52C41A}\text{普及+/提高}

#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 考试选择题模拟练习试卷(中级组)

第一部分

B,A,D,A,C,AB,A,D,A,C,A

第二部分

A,A,D,C,D,BA,A,D,C,D,B

第三部分

A,B,D,C,C,AA,B,D,C,C,A

第四部分

A,D,C,A,B,AA,D,C,A,B,A

第五部分

D,C,A,D,B,BD,C,A,D,B,B

第六部分

C,D,B,A,C,BC,D,B,A,C,B

第七部分

A,B,A,D,C,CA,B,A,D,C,C

第八部分

C,B,C,A,D,AC,B,C,A,D,A

模拟十: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 中国大陆许可协议进行许可。

posted @   luckydrawbox  阅读(2)  评论(0编辑  收藏  举报  
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起