CSP-J 九九乘法表

题目描述

yazhi 发现 LeavingZ 刚好在学九九乘法表,于是他立刻就想到了二维数组,如果用 f[i][j] 表示第 i 行 × 第 j 列的结果,那么乘法表的每一个式子都可以用这个式子表示:i×j=f[i][j]。

于是他直接思考一个 n×m 的二维数组 f[i][j]=i×j 相关的问题。

具体来说,就是二维数组中,第 i 行,第 j 列的数字等于 i×j,例如一个四行四列的二维矩阵就如下表所示:

1234
2468
36912
481216

现在他问 LeavingZ,对于所有的 f[i][j] ,第 k 小的值是多少。

显然 LeavingZ 并不会,并将问题甩给了机智的你。

代码

#include<bits/stdc++.h>
#define P pair<int,int>
#define mp make_pair
#define fi first
#define se second
#define N 517
using namespace std;

int n,m,k,pos[N];
priority_queue<P,vector<P>,greater<P>>pq;

int main()
{
	cin>>n>>m>>k;
	for(int i=1;i<=n;i++) pq.push(mp(i,i)),pos[i]=1;
	while(k--)
	{
		if(!k)
		{
			cout<<pq.top().fi;
			return 0;
		}
		int now=pq.top().se;
		pq.pop();
		if(pos[now]<m)
		{
			pos[now]++;
			pq.push(mp(pos[now]*now,now));
		}
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值