Bingo 3 - Gym 105901I - Virtual Judge

通过对样例模拟可以发现,要满足题目要求k的范围要在[n,n*(n-1)+1]之间。将对角线放上k到k+n-1,剩下的位置从 1 开始填,即可满足条件。
AC代码
#include <bits/stdc++.h>
using namespace std;
#define int long long
void solve()
{
int n,x;
cin>>n>>x;
int x1=x;
if(x<n||x>n*n-n+1){
cout<<"No"<<endl;
return ;
}
vector<vector<int> >a(n+1,vector<int>(n+1));
for(int i=1;i<=n;i++){
a[i][i]=x++;
}
int ans=1;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(i==j) continue;
a[i][j]=ans++;
if(ans==x1)
ans=x;
}
}
cout<<"Yes"<<endl;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
cout<<a[i][j]<<" ";
}
cout<<endl;
}
}
signed main()
{
ios::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
int t = 1;
cin >> t;
while (t--) solve();
return 0;
}
196

被折叠的 条评论
为什么被折叠?



