QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#617951 | #5438. Half Mixed | Cipherxzc# | TL | 3ms | 12336kb | C++23 | 1.5kb | 2024-10-06 17:51:33 | 2024-10-06 17:51:34 |
Judging History
answer
#include<bits/stdc++.h>
#define ll long long
#define ld long double
using namespace std;
const int N=1e6+10,inf=1e9;
vector<ll>e;
int a[N];
int n,m;
inline void solve(){
cin >> n >> m;
ll s1=1ll*(n+1)*n/2;
ll s2=1ll*(m+1)*m/2;
if ((s1&1)&&(s2&1)){
cout << "No\n";
return;
}
int bj=0;
if (s2&1){
swap(s1,s2);
bj=1;
}
s2/=2;
ll x=1;
int r=0,o=0,mm;
if (!bj) mm=m; else mm=n;
while(s2){
int p;
if (s2==mm-r) p=1;
else p = std::upper_bound(e.begin(), e.end(), s2) - e.begin();
if (e[p-1]==s2&&(r+p!=mm)) p--;
for(int i=r+1;i<=r+p;++i)
a[i]=o;
o^=1;
s2-=e[p-1];
r+=p;
}
assert(r == mm);
// if (r!=mm){
// cout << "No\n";
// return;
// }
cout << "Yes\n";
if (bj){
for(int i=1;i<=n;++i){
for(int j=1;j<=m;++j)
cout << a[i] << ' ';
cout << '\n';
}
}
else{
for(int i=1;i<=n;++i){
for(int j=1;j<=m;++j)
cout << a[j] << ' ';
cout << '\n';
}
}
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0),cout.tie(0);
ll x=1;
while(x<=N-10){
e.push_back(x*(x+1)/2);
x++;
}
int T;
cin >> T;
while(T--){
solve();
}
return 0;
}
詳細信息
Test #1:
score: 100
Accepted
time: 3ms
memory: 12336kb
input:
2 2 3 1 1
output:
Yes 0 1 0 0 1 0 No
result:
ok OK, Accepted. (2 test cases)
Test #2:
score: -100
Time Limit Exceeded
input:
5382 1 1 1 2 2 1 1 3 2 2 3 1 1 4 2 3 3 2 4 1 1 5 2 4 3 3 4 2 5 1 1 6 2 5 3 4 4 3 5 2 6 1 1 7 2 6 3 5 4 4 5 3 6 2 7 1 1 8 2 7 3 6 4 5 5 4 6 3 7 2 8 1 1 9 2 8 3 7 4 6 5 5 6 4 7 3 8 2 9 1 1 10 2 9 3 8 4 7 5 6 6 5 7 4 8 3 9 2 10 1 1 11 2 10 3 9 4 8 5 7 6 6 7 5 8 4 9 3 10 2 11 1 1 12 2 11 3 10 4 9 5 8 6 ...