2025 寒假训练第二周

天梯赛

考点:模拟基本功

L1-8 静静的推荐

如果知道了当PAT成绩大于s的时候,推荐这个人是不占名额的,那么对于批次的分配,每个对应的分数不大于k就可以,掌握了这个点,这道题的代码就很短了

void solve()
{	
	int n,k,s;
	cin>>n>>k>>s;
	int ans=0;
	map<int,int>mp;
	while(n--)
	{
		int x,y;
		cin>>x>>y;
		if(x>=175){
			if(y>=s) ans++;
			else if(mp[x]<k){
				ans++;
				mp[x]++;
			}
		}
		
		
	}
	
	cout<<ans;
	
	

}

L2-1 插松枝

恶心的不行的一道大模拟。。。
1.对箱子空或不空分类讨论,
如果箱子是空的,那么会有以下三种情况:
a、推进器的当前这个就是符合条件的,那么直接取,退出循环;
b、推进器当前这个不符合,下一个也不符合,就不断放进箱子,当然也要考虑箱子的大小
c、放着放着箱子放满了,推进器的也不符合要求,就开始下一个松枝的制作

如果箱子有东西,就要分类讨论其当前这个符合或者不符合题意
a、不符合,首先判推进器还有东西吗,没有就直接开始做下一个,如果有就是还要判断1中的abc三种情况,复制粘贴即可
b、符合了直接放进去就可以

#include <bits/stdc++.h>
using namespace std;
#define mod 1000000007
#define int long long
using pii=pair<int,int>;
using triple=tuple<int,int,int>;
int dx[]={0,0,-1,1,-1,-1,1,1};
int dy[]={1,-1,0,0,-1,1,-1,1};



void solve()
{	
	int n,m,k;
	cin>>n>>m>>k;
	queue<int>q;
	queue<int>ans[2000];
	stack<int>box;
	
	for(int i=0;i<2000;i++) ans[i].push(200); //放一个大数 省去判空的步骤
	
	for(int i=0;i<n;i++){
		int x; cin>>x;
		q.push(x);
	}
	
	int p=1;
	
	while(q.size()||box.size() ){
		
		if(ans[p].size()==k+1){//这个松枝已经插满了
			p++;
		}
		
		if(box.empty()){
			//箱子空的 
			while(q.size())
			{
				//直接从推进器去拿
				int x=q.front();
				if(x<=ans[p].back())
				{
					ans[p].push(x);
					q.pop();
					break;
				}else if(box.size()<m) //推进器的放不了 就放盒子里 但要够放
				{
					box.push(x);
					q.pop();
				}
				else{//盒子满了 推进器也不符合要求
					p++;
					break;
				}
			}
			
		}else{ //箱子不空
			
			int x=box.top();
			if(x>ans[p].back())
			{
				if(q.empty()){
					p++;
				}
				
				while(q.size())
				{
					//直接从推进器去拿
					x=q.front();
					if(x<=ans[p].back())
					{
						ans[p].push(x);
						q.pop();
						break;
					}else if(box.size()<m) //推进器的放不了 就放盒子里 但要够放
					{
						box.push(x);
						q.pop();
					}
					else{//盒子满了 推进器也不符合要求
						p++;
						break;
					}
				}
				
				
			}else{//符合要求
				ans[p].push(x);
				box.pop();
				
			}
			
		}
		
		
	}
	
	
	for(int i=1;i<=p;i++)
	{
		ans[i].pop();
		cout<<ans[i].front();
		ans[i].pop();
		
		while(ans[i].size())
		{
			cout<<" "<<ans[i].front();
			ans[i].pop();
		}
		
		cout<<"\n";
	}
	
	
	
	
}




signed main()
{
	ios::sync_with_stdio(0),cin.tie(0);
	int t=1; 
//	cin>>t;
	while(t--) solve();	
	
	
}

L2-2 老板的作息表
这一题其实就是注意时间的存储类型,用pair<string,string>来存,题目就变得很简单了,只需要输出有时间段点的地方就可以了

#include <bits/stdc++.h>
using namespace std;
#define mod 1000000007
#define int long long
using pii=pair<int,int>;
using triple=tuple<int,int,int>;
int dx[]={0,0,-1,1,-1,-1,1,1};
int dy[]={1,-1,0,0,-1,1,-1,1};
using pss=pair<string,string>;

void solve()
{	
	int n;
	cin>>n;
	vector<pss>ve;
	for(int i=0;i<n;i++)
	{
		string a,b,x;
		cin>>a>>x>>b;
		ve.push_back({a,b});
	}
	ve.push_back({"","00:00:00"});
	ve.push_back({"23:59:59",""});
	
	sort(ve.begin(),ve.end());
	
	for(int i=1;i<=ve.size();i++)
	{
		if(ve[i].first!=ve[i-1].second){
			cout<<ve[i-1].second<<" - "<<ve[i].first<<"\n";
		}
		
	}
	
}




signed main()
{
	ios::sync_with_stdio(0),cin.tie(0);
	int t=1; 
	//cin>>t;
	while(t--) solve();	
	
}

考点:二叉树

L2-3 龙龙送外卖

怎么样让我们经过所有目的地,同时保持代价最小,从贪心的角度想,我们可以举个例子,一个点深度大,一个点深度小,那么你肯定是先走到深度小的,然后绕回出发点,再去走深度大的,因为深度大的如果你多走一次,那么代价就会更大。

然后,画图我们可以多枚举几个点,可以发现最小的代价=所有的简单路径*2-最长的那一条路的,想好递归这个过程,每添加一个点,要看最长的那条是不是更新了

int dis[100005];
int fa[100005];
int mx=0;

int dfs(int x,int d)
{
	if(fa[x]==-1||dis[x]){//画图理解,如果走到根节点或者该点已经走过就要返回距离,并且
		
		mx=max(mx,dis[x]+d);
		return 2*d;
	}
	
	
	int res=dfs(fa[x],d+1);
	dis[x]=dis[fa[x]]+1;
	return res;
	
	
}



void solve()
{	
	int n,m;
	cin>>n>>m;
	for(int i=1;i<=n;i++)
	{
		cin>>fa[i];
	}
	
	int sum=0;
	while(m--){
		int x; cin>>x;
		
		sum+=dfs(x,0);
		cout<<sum-mx<<"\n";
	}
	
}

牛客

小L出师了
这题容易想到去减掉炸鸡的场数然后去整除,但是还得注意,炸鸡的场数是要用来隔开的小l的,所以也要考虑这个点

void solve()
{	
	int n,t,k;
	cin>>n>>t>>k;
	cout<<min((n-k)/t,k+1)<<"\n";
	
}

小L的数学题
只要记住非0整数无法变成0,并且0也无法变成非零整数,其他数,大了你就去开方,小了你就去乘2,总是可以变成你要的数的,可以当成结论来记

void solve()
{	
	int n ,m;
	cin>>n>>m;
	if(n==0&&m!=0) cout<<"No";
	else if(m==0&&n!=0) cout<<"No";
	else cout<<"Yes";
	cout<<"\n";
}

小L的位运算
还在思考
小L的井字棋
马上就补

posted on 2025-02-09 17:14  swj2529411658  阅读(25)  评论(0)    收藏  举报

导航