2021天梯赛补题

这篇具有很好参考价值的文章主要介绍了2021天梯赛补题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

题目详情 - L2-039 清点代码库 (pintia.cn)

思路:

  1. 因为map可以存stl容器,我们可以用vector存每一行信息,再用map存储每一行产生的vector,记录其出现次数
  2. map存vector时也会自动按vector大小比较,给每一种输出按小到大排序。
  3. 那么我们最后只需要按map顺序用vector<pair<int,vector<int>>>ans存储map的每一个vector及其次数即可,然后再排序。
  4. (注意,把出现次数改为负的才可以用less<pair>排序,不可以不改就使用greater<pair>来排序,会打乱map原本排好的按小到大顺序,否则就自定义排序也可以)
#include <bits/stdc++.h>
using namespace std;
#define ll               long long
#define endl             "\n"
const int N = 2e5 + 10;
map<vector<int>,int>mp;
vector<pair<int,vector<int>>>ans;
void mysolve()
{
	int n,m,x;
	cin>>n>>m;
	for(int i=1; i<=n; ++i)
		{
			vector<int>tmp;
			for(int j=1; j<=m; ++j)cin>>x,tmp.push_back(x);
			mp[tmp]++;
		}
	for(auto &k:mp)ans.push_back({-k.second,k.first});
	sort(ans.begin(),ans.end());
	cout<<ans.size()<<endl;
	for(auto k:ans)
		{
			cout<<-k.first;
			for(auto v:k.second)cout<<" "<<v;
			cout<<endl;
		}
}

int32_t main()
{
	std::ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
	ll t=1;
	//cin >> t;
	while (t--)
		{
			mysolve();
		}
	system("pause");
	return 0;
}

题目详情 - L3-028 森森旅游 (pintia.cn)

思路:

  1. 我们想到每次只改一个点,那么我们可以记录所有点到起点与终点的距离,然后维护区间最小即可
  2. 所以首先跑两遍堆优化dijksta
  3. 因为只维护区间一个数据,所以可以用multiset存储值,就不需要使用线段树或者树状数组了
#include <bits/stdc++.h>
using namespace std;
#define ll               long long
#define endl             "\n"
#define int              long long
typedef pair<int, int> pii;
const ll llINF = 0x3f3f3f3f3f3f3f3f;//ll型的llINF
const int N =2e5+10;

struct node
{
	int v,c,d;
};
vector<node>edge1[N],edge2[N];
int b[N];
int n,m,q;

void dijksta(int st,vector<int>&dis,bool fl)//正反dijksta
{
	dis[st]=0;
	priority_queue<pii,vector<pii>,greater<pii>>q;
	q.push({dis[st],st});
	if(!fl)
		while(!q.empty())
			{
				int u=q.top().second;
				q.pop();
				for(node k:edge1[u])
					{
						if(dis[k.v]>dis[u]+k.c)
							{
								dis[k.v]=dis[u]+k.c;
								q.push({dis[k.v],k.v});
							}
					}
			}
	else
		{
			while(!q.empty())
				{
					int u=q.top().second;
					q.pop();
					for(node k:edge2[u])
						{
							if(dis[k.v]>dis[u]+k.d)
								{
									dis[k.v]=dis[u]+k.d;
									q.push({dis[k.v],k.v});
								}
						}
				}
		}
}
void mysolve()
{
	cin>>n>>m>>q;
	int x,y,c,d;
	vector<int>dis1(n+1,llINF),dis2(n+1,llINF);
	for(int i=1; i<=m; ++i)cin>>x>>y>>c>>d,edge1[x].push_back({y,c,d}),edge2[y].push_back({x,c,d});
	dijksta(1,dis1,0),dijksta(n,dis2,1);
	multiset<ll>st;
	for(int i=1; i<=n; ++i)
		{
			cin>>b[i];
			if(dis1[i]!=llINF&&dis2[i]!=llINF)st.insert(dis1[i]+(dis2[i]+b[i]-1)/b[i]);//注意dis为llINF时,是不存在这种走法的,此时强行更新会污染数据,所以必须都可以走才更新
		}
	while(q--)
		{
			cin>>x>>y;
			if(dis1[x]!=llINF&&dis2[x]!=llINF)//注意边要可以走
				{
					st.erase(st.find(dis1[x]+(dis2[x]+b[x]-1)/b[x]));
					b[x]=y;
					st.insert(dis1[x]+(dis2[x]+b[x]-1)/b[x]);
				}
			cout<<*st.begin()<<endl;
		}
}

int32_t main()
{
	std::ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
	ll t=1;
	//cin >> t;
	while (t--)
		{
			mysolve();
		}
	system("pause");
	return 0;
}

题目详情 - L3-029 还原文件 (pintia.cn)

思路:

  1. 他搞得好像花里胡哨,但是因为M只有100,我不仅可以暴力O(n^2),甚至可以暴力O(n^3)
  2. 所以,我们直接用string存每一行数据,然后dfs匹配即可(必须dfs,因为我可能有多个片段开头一点是相同的,你总不能说他们各自的位置可以随便放吧)
#include <bits/stdc++.h>
using namespace std;
#define ll               long long
#define endl             "\n"
#define endll            endl<<endl
const int N = 12000;
string s[N];
bool vis[N];
string b;
vector<int>ans;
bool flag;
int m,k;
void dfs(int num,int p)
{
	if(num==m)//如果能m段匹配完,说明是正确答案,不用再dfs了
		{
			flag=1;
			return;
		}
	if(flag)return;
	for(int j=1; j<=m; ++j)
		{
			if(!vis[j])
				{
					int len=(int)s[j].size();
					if(b.substr(p+1,len)==s[j])
						{
							vis[j]=1;
							int tmp=p;
							ans.push_back(j);

							for(int x=p+len; x>=0; --x)if(b[x]==' ')
									{
										tmp=x;
										break;
									}
							dfs(num+1,tmp);
							if(flag)return;
							ans.pop_back();
							vis[j]=0;
						}
				}
		}
}

void mysolve()
{
	int n;
	cin>>n;
	getchar();
	getline(cin,b);
	b=' '+b;
	int p=0;
	cin>>m;
	for(int i=1; i<=m; ++i)
		{
			cin>>k;
			getchar();
			getline(cin,s[i]);
		}
	dfs(0,p);
	for(int i=0; i<(int)ans.size(); ++i)
		{
			if(i!=0)cout<<" ";
			cout<<ans[i];
		}

}

int32_t main()
{
	//	std::ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
	ll t=1;
	//cin >> t;
	while (t--)
		{
			mysolve();
		}
	system("pause");
	return 0;
}

文章来源地址https://www.toymoban.com/news/detail-413994.html

到了这里,关于2021天梯赛补题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 天梯赛 L2-034 口罩发放

    PTA | 程序设计类实验辅助教学平台 为了抗击来势汹汹的 COVID19 新型冠状病毒,全国各地均启动了各项措施控制疫情发展,其中一个重要的环节是口罩的发放。 某市出于给市民发放口罩的需要,推出了一款小程序让市民填写信息,方便工作的开展。小程序收集了各种信息,包

    2023年04月21日
    浏览(36)
  • 天梯赛 L2-052 吉利矩阵

    //r[n]:当前第几列的值。 //l[n]:当前第几行的值。 暴力+减止

    2024年04月25日
    浏览(44)
  • 天梯赛 L2-3 龙龙送外卖

    L2-3 龙龙送外卖 (25 分) 龙龙是“饱了呀”外卖软件的注册骑手,负责送帕特小区的外卖。帕特小区的构造非常特别,都是双向道路且没有构成环 —— 你可以简单地认为小区的路构成了一棵树,根结点是外卖站,树上的结点就是要送餐的地址。 每到中午 12 点,帕特小区就进入

    2024年02月03日
    浏览(97)
  • 【团体程序设计天梯赛】L2-052 吉利矩阵

    思路: 直接回溯枚举每一个位置填的数,二维肯定是不方便的,我们转成一维,下标x从0到n*n-1。二维数组下标从0到n-1,在一维中下标为x的点在二维中对应行是x/n,列是x%n。 每个数最小能填的是0,最大肯定就是l了,时间复杂度的上限是n的2l次幂,4的18大概是1e11这样。 我们

    2024年04月27日
    浏览(45)
  • 团体程序设计天梯赛-练习集L2篇⑦

    🚀欢迎来到本文🚀 🍉个人简介:Hello大家好呀,我是陈童学,一个与你一样正在慢慢前行的普通人。 🏀个人主页:@陈童学哦`CSDN 💡所属专栏:PTA 🎁希望各位→点赞👍 + 收藏⭐️ + 留言📝 ​ ⛱️刷题的当下应是享受的!望与诸君共勉!🏄‍♂️ 下面是PTA的OJ平台 PTA的

    2024年02月11日
    浏览(90)
  • 团体程序设计天梯赛 L2-013 红色警报(连通分量)

    分数 25 战争中保持各个城市间的连通性非常重要。本题要求你编写一个报警程序,当失去一个城市导致国家被分裂为多个无法连通的区域时,就发出红色警报。注意:若该国本来就不完全连通,是分裂的k个区域,而失去一个城市并不改变其他城市之间的连通性,则不要发出

    2024年03月13日
    浏览(52)
  • 2023团队天梯模拟赛 L2-3 智能护理中心统计 and L3-1 塔防游戏(23分)

    L2-3 智能护理中心统计 智能护理中心系统将辖下的护理点分属若干个大区,例如华东区、华北区等;每个大区又分若干个省来进行管理;省又分市,等等。我们将所有这些有管理或护理功能的单位称为“管理结点”。现在已知每位老人由唯一的一个管理结点负责,每个管理结

    2023年04月19日
    浏览(51)
  • 2021 年数学建模竞赛题目D 题 连铸切割的在线优化

          在满足基本要求和正常要求的条件下,依据尾坯长度制定出最优的 切割方案。假定用户目标值为 9.5 米,目标范围为 9.0~10.0 米,对以下尾坯长 度:109.0、93.4、80.9、72.0、62.7、52.5、44.9、42.7、31.6、22.7、14.5 和 13.7(单位:米),按“尾坯长度、切割方案、切割损失”等

    2024年02月11日
    浏览(77)
  • 【PTA】L1-039 古风排版(C++)

    题目链接:L1-039 古风排版 - 团体程序设计天梯赛-练习集 (pintia.cn)  目录: 题目要求: 输入格式: 输出格式: 输入样例: 输出样例: 思路: 代码: 测试结果: ​编辑  中国的古人写文字,是从右向左竖向排版的。本题就请你编写程序,把一段文字按古风排版。 输入在第

    2024年03月26日
    浏览(95)
  • 低代码-详情页组件设计

    进表单初始化,只展示表单属性,隐藏通用、数据、事件tab项。 配置Properties: 我将此配置放置于Properties组件中,触发条件为: 监听到的选中组件(selectItem)为空就触发 做好上述初始化后,便要专注于表单属性的配置了,以下列出需要的详情页属性配置: 详情页标题 详情页

    2024年01月17日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包