题目描述
yazhi 发现 LeavingZ 刚好在学九九乘法表,于是他立刻就想到了二维数组,如果用 f[i][j] 表示第 i 行 × 第 j 列的结果,那么乘法表的每一个式子都可以用这个式子表示:i×j=f[i][j]。
于是他直接思考一个 n×m 的二维数组 f[i][j]=i×j 相关的问题。
具体来说,就是二维数组中,第 i 行,第 j 列的数字等于 i×j,例如一个四行四列的二维矩阵就如下表所示:
1 | 2 | 3 | 4 |
---|---|---|---|
2 | 4 | 6 | 8 |
3 | 6 | 9 | 12 |
4 | 8 | 12 | 16 |
现在他问 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));
}
}
}