M. My University Is Better Than Yours(思维)

Problem - M - Codeforces

题意:

题意:给定m个含有n个元素的排列,规定元素x大于y的话只需要有一个排列中有x在y前面即可。而x大于z的话又可以通过这样的步骤来得出:
1.x在某个排列里比y靠前
2.y在某个排列里比z靠前
3.所以x比z大

输出m个数,每个数代表第i个元素比多少元素大。

第一行包含两个整数n和m(1≤n≤5×105,1≤m≤5×105,1≤n×m≤106),表示考虑的大学数量,和大学排名的数量。

然后是m行。第i行包含n个不同的整数si,1, si,2, ..., si,n(1≤si,j≤n),表示第i个大学排名的顺序(从高到低)。

输出
输出一行n个整数a1,a2,...,an,用空格分隔。第i个数字ai表示第i所大学优于的大学数量。'

题解:

突破点就是每一行都是一个排列,我们知道一个排列中每个元素仅出现一次,那么我们按照列优先去遍历他给出的n列m行矩阵。

如果遍历到的矩阵的元素是第一次出现,那么我们要记录这个数,同时记录到目前为止有多少个“第一次出现”的数。

假如第一列有两个第一次出现的数是1和2,如果我们想说1和2比剩下的所有数(n-1个数)都大,那么我们就应该确保第一列和第二列不会再出现“第一次出现的数”。否则,如果第二列出现了新的“第一次出现”的数3,那么势必代表在这个3出现的哪一行里1和2中有一个跑到了第二列的3的后面,那么就可以论证3大于1也大于2。所以3就也比剩下的所有数都大。然后就继续要去遍历前三列没有新增的第一次出现的数。

具体见代码

#include<iostream>
#include<vector>
#include<queue>
using namespace std;
vector<int> a[500050];
int vis[500050];
int ans[500050];
int main()
{
	int n,m;
	cin >> n >> m;
	for(int i = 1; i <= m;i++)
	{
		for(int j = 1;j <= n;j++)
		{
			int x;
			cin >> x;
			a[i].push_back(x);
		}
	}
	int num = 0;
	queue<int> q;
	for(int i = 0,las = 1;i < n;i++)
	{
		for(int j = 1;j <= m;j++)
		{
			if(!vis[a[j][i]])
			{
				vis[a[j][i]] = 1;
				num++;
				q.push(a[j][i]);
			}
		}
		if(num == i+1)
		{
			while(q.size())
			{
				int k = q.front();
				q.pop();
				ans[k] = n - las;
			}
			las = num + 1;
		}
	}
	for(int i = 1;i <= n;i++)
	{
		cout<<ans[i]<<" ";
	}
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
《PDF Robust Optimization》是普林斯顿大学出版社于2009年出版的一本重要书籍。在这本书中,作者通过研究和探讨PDF(概率分布函数)鲁棒优化的概念和方法,为解决现实生活中不确定性和风险的决策问题提供了有力的工具和框架。 这本书的主要目的是帮助读者理解和应用PDF鲁棒优化模型。PDF鲁棒优化是在考虑决策变量不确定性的情况下,通过最大化系统的鲁棒性来优化系统性能。通过将不确定性建模为概率分布函数,该方法可以更好地处理不确定性,并提供更可靠和鲁棒的决策结果。 在《PDF Robust Optimization》这本书中,作者首先对鲁棒优化的基本概念进行了介绍,并详细讨论了不确定性建模和概率分布函数的选择。然后,他们介绍了针对不同类型的约束和目标函数的PDF鲁棒优化方法,并提供了数个实际案例分析。通过这些案例,读者可以更好地理解和应用这种方法来解决实际问题。 此外,在这本书中还介绍了一些先进的数学工具和算法,如概率分布函数的拟合和参数估计方法,以及鲁棒优化的求解技术。这些工具和算法可以帮助读者更好地理解和应用PDF鲁棒优化模型。 综上所述,《PDF Robust Optimization》是一本权威且实用的书籍,它为读者提供了理解和应用PDF鲁棒优化模型的基础知识和实践经验。无论是研究人员还是决策者,都可以通过阅读和学习这本书,更好地解决不确定性和风险的决策问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值