2023年蓝桥杯c++b组 个人代码

A

B

我算出来答案是11027421

k = 11625907.5798
import math
n = 23333333
def aaa(x,n):
    y = n-x
    return (-1*x*x/n*math.log(x/n,2)-y*y/n*math.log(y/n,2))
i=1
while(i<n):
    i+=1
    t = aaa(i,n)
    if k-0.001<t<k+0.001:
        print(i,aaa(i,n))

C

#include<bits/stdc++.h>
using namespace std;
int n,a[10002],b[10002];

int main(){
	cin>>n;
	for(int i=0;i<n;i++){
		cin>>a[i]>>b[i];
	}
	int lower = 0,upper = 1000000003;
	for(int i=0;i<n;i++){
		upper = min(upper,a[i]/b[i]);
		lower = max(lower,a[i]/(b[i]+1)+1);
	}
	cout<<lower<<' '<<upper;
	return 0;
}

D

#include<bits/stdc++.h>
using namespace std;
int q,n,t[10],d[10],l[10],cur,cnt;
bool vis[10],findd;
void dfs(){
	for(int i=0;i<n;i++){
		if(vis[i] || cur>t[i]+d[i])continue;
		vis[i]=1;cnt++;int f = cur;
		cur=max(cur,t[i])+l[i];
		dfs();
		vis[i]=0;cnt--;cur=f;
	}
	if(cnt==n)findd=true;
}
void ttt(){
	findd = false;cur  = 0;
	cin>>n;
	for(int i=0;i<n;i++){
		cin>>t[i]>>d[i]>>l[i];
	}
	for(int i=0;i<n;i++){
		vis[i]=1;int f = cur;cnt++;
		cur = t[i]+l[i];
		dfs();
		cnt--;cur = f;vis[i]=0;
	}
	cout<<(findd?"YES":"NO")<<endl;
}
int main(){
	cin>>q;
	while(q--){
		ttt();
	}
	return 0;
}

E

#include<bits/stdc++.h>
using namespace std;
int n,a[100003],f[100003][10];
int head(int n){
	while(n>9){
		n/=10;
	}
	return n;
}
int main(){
	cin>>n;
	for(int i=0;i<n;i++){
		cin>>a[i];
	}
	for(int j=0;j<=9;j++){
		if(j!=a[0]%10)f[0][j]++;
	}

	for(int i=1;i<n;i++){
		for(int j=0;j<=9;j++){
			f[i][j] = f[i-1][j]+1;
		}
		f[i][a[i]%10] = min(f[i][a[i]%10],f[i-1][head(a[i])]);
	}
	/*for(int i=1;i<n;i++){
		for(int j=0;j<=9;j++)cout<<f[i][j]<<' ';
		cout<<endl;
	}*/
	int ans=10000000;
	for(int j=0;j<=9;j++)ans = min(ans,f[n-1][j]);
	cout<<ans;
	return 0;
}

F 岛

这道题不会做。。。。

G

#include<bits/stdc++.h>
using namespace std;
int k;
string s;
char c1,c2;
int a[500003],b[500003],cnt1,cnt2;
int main(){
	cin>>k>>s>>c1>>c2;
	k-=2;
	int m = s.size();
	for(int i=0;i<m;i++){
		if(s[i]==c1)a[cnt1++]=i;
		if(s[i]==c2)b[cnt2++]=i;
	}
	long long ans=0;
	for(int i=0;i<cnt1;i++){
		ans += cnt2-(upper_bound(b,b+cnt2,a[i]+k)-b);
	}
	cout<<ans;
	return 0;
}

H

尝试用优先队列没写出来,交了一个暴力

#include<bits/stdc++.h>
using namespace std;
int n,k,arr[500003],fg[500003];
bool ff;
int main(){
	cin>>n>>k;
	for(int i=0;i<n;i++){
		scanf("%d",arr+i);
	}
	while(k--){
		int m = 10000000,index=0;
		for(int i=0;i<n;i++){
			if(fg[i]!=-1 && arr[i]<m){
				m=arr[i];index=i;
			}
		}
		fg[index]=-1;
		ff=0;int a;
		for(int i=index+1;i<n;i++){
			if(fg[i]!=-1){
				ff=1;a=i;break;
			}
		}
		if(ff)arr[a]+=arr[index];
		ff=0;
		for(int i=index-1;i>=0;i--){
			if(fg[i]!=-1){
				ff=1;a=i;break;
			}
		}
		if(ff)arr[a]+=arr[index];
	}
	for(int i=0;i<n;i++){
		if(fg[i]!=-1){
			cout<<arr[i]<<' ';
		}
	}
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值