2022年第十三届蓝桥杯大赛软件类省赛C/C++大学B组

刷题统计

#include<bits/stdc++.h>
using namespace std;
#define ll long long 
ll a,b,n,ans=0;
ll week;
int main()
{
	cin>>a>>b>>n;
	week=5*a+2*b;
	ans+=(7*(n/week));
	n=n%week;
	if(n>=5*a){
		ans+=5;
		n-=(5*a);
		ans+=(n/b);
		if(n%b!=0){
			ans++;
		}
	}else {
		ans+=(n/a);
		if(n%a!=0){
			ans++;
		}
	}
	cout<<ans<<endl;
	return 0;
}

修剪灌木

#include<bits/stdc++.h>
using namespace std;
#define ll long long 
int main()
{
	ll n;
	cin>>n;
	for(ll i=1;i<=n;i++){
		cout<<2*max(n-i,i-1)<<endl;
	}
	return 0;
}

X进制减法

#include<bits/stdc++.h>
using namespace std;
#define ll long long 
const ll maxn=1e5+10;
const ll mod=1000000007;
ll ma,mb,n,ans=0;
ll a[maxn],b[maxn],sub[maxn],more[maxn];
void op(){
	for(ll i=1;i<=ma;i++){
		ans=(ans*more[i]+sub[i])%mod;
	}
	cout<<ans<<endl;
	return ;
}
void show(){
	for(ll i=1;i<=ma;i++){
		cout<<sub[i]<<' ';
	}
	cout<<endl;
	for(ll i=1;i<=ma;i++){
		cout<<more[i]<<' ';
	}
	cout<<endl;
	return ;
}
int main()
{
	cin>>n;
	cin>>ma;
	sizeof(a,0,sizeof(a));
	sizeof(b,0,sizeof(b));
	for(ll i=1;i<=ma;i++){
		cin>>a[i];
	}
	cin>>mb;
	for(ll i=ma-mb+1;i<=ma;i++){
		cin>>b[i];
	}
	for(ll i=1;i<=ma;i++){
		sub[i]=a[i]-b[i];
		more[i]=max(a[i],b[i])+1;
		if(more[i]<2) more[i]=2;
	}
//	show();
	op();
	return 0;
}

统计子矩阵

#include<bits/stdc++.h>
using namespace std;
#define ll long long 
ll n,m,k;
const ll maxn=550;
ll a[maxn][maxn];
ll sum[maxn][maxn];
ll ans=0;
ll check(ll p,ll q,ll l,ll r){
    ll s=sum[q][r]-sum[p-1][r]-sum[q][l-1]+sum[p-1][l-1];
    if(s<=k) return 1;
    return 0;
}
int main()
{
    cin>>n>>m>>k;
    for(ll i=1;i<=n;i++){
        for(ll j=1;j<=m;j++){
            cin>>a[i][j];
        }
    }
    for(ll i=1;i<=n;i++){
        for(ll j=1;j<=m;j++){
            sum[i][j]=sum[i-1][j]+sum[i][j-1]-sum[i-1][j-1]+a[i][j];
        }
    }
//    cout<<"YES"<<endl;
//    for(ll i=1;i<=n;i++){
//        for(ll j=1;j<=m;j++){
//            cout<<sum[i][j]<<' ';
//        }
//        cout<<endl;
//    }
    for(ll i=1;i<=n;i++){
        for(ll j=i;j<=n;j++){
            ll l=1,r=1;
            while(l<=m){
                if(check(i,j,l,r)==1){
                    if(r==m){
                        ans+=(r-l+1);
                        l++;
                    }else r++;
                }else {
                    l++;
                    ans+=(r-l+1);
                }
                if(l>r) r=l;
            }
            
        }
    }
    cout<<ans<<endl;
    return 0;
}

积木画

#include<bits/stdc++.h>
using namespace std;
#define ll long long 
const ll mod=1000000007;
const ll maxn=1e5+10;
ll n0,n1,n2,n3,t0,t1,t2,t3;
ll n;
//0 缺两个横着 
//1 缺一个
//2 缺两个竖着 
//3 填满了 
void show(){
	cout<<n0<<' '<<n1<<' '<<n3<<endl;
}
int main()
{

	cin>>n;
	n0=0;
	n1=0;
	n2=0;
	n3=1; 
//	show();
	for(ll i=1;i<=n;i++){
		//0 缺两个横着 
		//1 缺一个
		//3 填满了 
		t0=n3%mod;
		t1=(n0*2+n1)%mod;
		if(i>=2) t3=(n0)%mod;
		t3=(t3+n1+n3)%mod;
		n0=t0;
		n1=t1;
		n3=t3;
//		show();
	}
//	show();
	cout<<n3<<endl;
	return 0;
}

扫雷

#include<bits/stdc++.h>
using namespace std;
#define ll long long 
ll n,m;
const ll maxn=201;
ll a[maxn][maxn];
ll sum[maxn][maxn];
ll check(ll p,ll q,ll l,ll r){
	if(p==0)p=1;
	if(l==0)l=1;
	if(q>n) q=n;
	if(r>m) r=m;
	return sum[q][r]-sum[p-1][r]-sum[q][l-1]+sum[p-1][l-1];
}
int main()
{
	cin>>n>>m;
	for(ll i=1;i<=n;i++){
		for(ll j=1;j<=m;j++){
			cin>>a[i][j];
		}
	}
	for(ll i=1;i<=n;i++){
		for(ll j=1;j<=m;j++){
			sum[i][j]=sum[i-1][j]+sum[i][j-1]-sum[i-1][j-1]+a[i][j];
		}
	}
	for(ll i=1;i<=n;i++){
		for(ll j=1;j<=m;j++){
			cout<<(a[i][j]==1?9:check(i-1,i+1,j-1,j+1))<<' ';
		}cout<<endl;
	}
	return 0;
	
 } 

李白打酒加强版(动态规划)

#include<bits/stdc++.h>
using namespace std;
#define ll long long 
const ll mod=1000000007 ;
ll n,m;
ll f[200][200][200];//*2 -1  jiu
int main()
{
	cin>>n>>m;
	f[0][0][2]=1;
	for(ll i=0;i<=n;i++){
		for(ll j=0;j<=m;j++){
			for(ll k=0;k<=200;k++){
				if(i==0&&j==0)continue;
				
				if(i>=1&&k%2==0) f[i][j][k]=(f[i][j][k]+f[i-1][j][k/2])%mod;
				if(j>=1) f[i][j][k]=(f[i][j][k]+f[i][j-1][k+1])%mod;
			}
		}
	}
	cout<<f[n][m-1][1]<<endl;
	return 0;
}

砍竹子(优先队列)

#include<bits/stdc++.h>
using namespace std;
#define ll long long 
ll n;
struct cmp{
	bool operator()(const pair<ll,ll> & x, const  pair<ll,ll> & y)const {
		if(x.first!=y.first) return x.first<y.first;//height
		return x.second>y.second;//number
	}
};
pair<ll,ll>p;
priority_queue<pair<ll,ll>,vector<pair<ll,ll> >,cmp>pr;
int main()
{
	ll n;
	cin>>n;
	for(ll i=1;i<=n;i++){
		ll x;
		cin>>x;
		if(x==1) continue;
		p.first=x;
		p.second=i;
		pr.push(p);
	}
	ll ans=0;
	while(pr.empty()!=1){
		ll idx=0;
		ll th=pr.top().first;
		while(1){
			p=pr.top();
			ll num=p.second;
			ll h=p.first;
			if(h==th&&(idx==0||idx+1==num)){
				idx=num;
				pr.pop();
				h=sqrtl(h/2+1);
				if(h==1) continue;
				p.first=h;
				pr.push(p);
			}else break;
		}
		ans++;
	}
	cout<<ans<<endl;
	return 0;
}

  • 5
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值