站外题求调
查看原帖
站外题求调
1176168
rxr2018360074楼主2025/7/24 11:06

题意:

给定一个 n×nn\times n 的矩阵 AA,其中 Ai,j=i2+i×100000+j2j×100000+ijA_{i,j}=i^{2}+i\times100000+j^{2}-j\times100000+i*j。求出矩阵中第 mm 大的数。

输入格式:

第一行输入 TT,表示测试数据的数量。

接下来 TT 行,每行输入 nnmm,含义如题目所述。

代码:

#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll gs(ll x,ll y){
	return x*x+x*100000+y*y-y*100000+x*y;
}
int main(){
	int t;
	cin>>t;
	while(t--){
		ll n,m;
		cin>>n>>m;
		if(m<=n*(n+1)/2){
			ll x=1;
			while(x*(x-1)/2+1<=m){
				x++;
			}
			x--;
			ll sl=n-x;
			ll ji=1;
			for(int i=(x*(x-1)/2)+1;i<=m;i++){
				ji++;
			}
			cout<<gs(ji-1,ji-1+sl)<<"\n";
		}
		else{
			m-=(n*(n+1)/2);
			ll d=0,step=n-1;
			ll ji=0;
			while(d<m){
				d+=step;
				step--;
				ji++;
			}
			ll ji2=n;
			for(int i=d;i>m;i--){
				ji2--;
			}
			cout<<gs(ji2,ji2-ji)<<"\n";
		}
	}
	return 0;
}

0分代码(没超时),但是我测过了,打印的整张表都是正确的,不知道错在哪,求大佬帮忙调整

2025/7/24 11:06
加载中...