比赛链接:第 21 场 小白入门赛 - 蓝桥云课

1.动态密码

#include <iostream>
using namespace std;
int main()
{
	char result[10010];
	cout<<itoa(20241111,result,2)<<endl;
	return 0;
}

2.购物车的宝贝

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int n;
int a[100010];
int main()
{
	cin>>n;
	for(int i=0; i<n; i++)
	{
		cin>>a[i];
	}
	int sum=a[0]; 
	for(int i=1; i<n; i++)
	{
		sum^=a[i];
	}
	if(sum==0)
	{
		cout<<"YES"<<endl;
	}
	else
	{
		cout<<"NO"<<endl;
	}
	return 0;
}

3.代金券

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll t,num;
int main()
{
	cin>>t;
	while(t--)
	{
		ll n,m;
		cin>>n>>m;
		string temp=to_string(n);
		ll min_num=LLONG_MAX;
		for(int i=0;i<=temp.size();i++)
		{
			for(int j=0;j<=9;j++)
			{
				string new_temp=temp;
				new_temp.insert(i,to_string(j));
				num=stoll(new_temp);
				if(num>n && (num%m==0))
				{
					min_num=min(min_num,num);
				}
			}
		}
		if(min_num==num)
		{
			cout<<-1<<endl;
		}
		else
		{
			cout<<min_num<<endl;
		}
	}
	return 0;
}

4.蓝桥商场

// 贪心最优策略:交替吃食物,当食物最多的超过其他之和,此时会等待浪费时间 
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int n,sum=0;
int a[100010]; 
int main()
{
	cin>>n;
	for(int i=0;i<n;i++)
	{
		cin>>a[i];
		sum+=a[i];
	}
	sort(a,a+n);
	cout<<max(sum,2*a[n-1]-1)<<endl;
	return 0;
}

5.蓝桥派对

#include<bits/stdc++.h>
using namespace std;
int n,m;
typedef pair<int,int>num;
vector<num>nums;
int main()
{
	cin>>n>>m;
	int a[n],b[n];
	for(int i=0;i<n;i++)
	{
		cin>>a[i]>>b[i];
		nums.emplace_back(a[i],b[i]);
	}
	sort(a,a+n);
	sort(b,b+n);
	int f[n];
	for(int i=0;i<n;i++)
	{
		int l=nums[i].first; //开始点 
		int r=nums[i].second; //结束点 
		int front=upper_bound(a,a+n,r)-a; //在结束点之前开始的所有人
		int end=lower_bound(b,b+n,l)-b; //在开始点之前结束的所有人
		f[i]=front-end-1; //所有开始-所有结束=区间内的交朋友个数 
	}
	for(auto x:f)
	{
		cout<<x<<endl;
	}
	return 0;
}

6.薅羊毛

//相邻数最小公倍数就是相邻数相乘(没有公因子) 
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int mod=1e9+7;
ll l,r,sum=0;
ll qmi(ll b,ll q,ll k)
{
	ll res=1;
	while(q)
	{
		if(q&1) res=res*b%k;
		q>>=1;
		b=b*b%k;
	}
	return res;
}

int main()
{
	cin>>l>>r;
	for(int i=l;i<r;i++)
	{
		sum=(sum+qmi(i,i,mod)*qmi(i+1,i+1,mod)%mod)%mod; 
	}
	cout<<sum<<endl;
	return 0;
}

7.小H学语文

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll n;
ll h[200010];
typedef pair<int,int>num;
vector<num>nums;
int main()
{
	cin>>n;
	for(int i=0; i<n; i++)
	{
		cin>>h[i];
		nums.push_back({i+1,h[i]});
	}
	//算出最大(从数组h[]中选择x个数,x的平方乘以x个数的最小值)
	sort(nums.begin(), nums.end(), [](const pair<int, int> &a, const pair<int, int> &b)
	{
		return a.second < b.second; // 按高度升序排序
	});
	ll max1=0,sum1=0; //最大体积,木板数
	vector<int>index; //索引
	for(int i=1; i<=n; i++)
	{
		int result = i*i*nums[n-i].second; //从排序的尾部选木板数量,nums从0开始
		if(result>max1)
		{
			max1=result;
			sum1=i;
		}
	}
	cout<<sum1<<endl;
	for(int j=n-sum1; j<n; j++)
	{
		index.push_back(nums[j].first);
	}
	sort(index.begin(),index.end());
	for(int t:index)
	{
		cout<<t<<" ";
	}
	return 0;
}

总结知识点:

1.itoa()函数用法

2. ^位运算

3.字符串插入insert(i,to_string(j)),stoll()函数用法,LLONG_MAX

4.nums.emplace_back(),upper_bound()和lower_bound()二分用法

5.快速幂

6.新的排序方法:

sort(nums.begin(), nums.end(), [](const pair<int, int> &a, const pair<int, int> &b)
    {
        return a.second < b.second; /
    });

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部