题意:
给定一个 n×n 的矩阵 A,其中 Ai,j=i2+i×100000+j2−j×100000+i∗j。求出矩阵中第 m 大的数。
输入格式:
第一行输入 T,表示测试数据的数量。
接下来 T 行,每行输入 n 和 m,含义如题目所述。
代码:
#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分代码(没超时),但是我测过了,打印的整张表都是正确的,不知道错在哪,求大佬帮忙调整