A.先判断有没有是升序状态,如果没有看k值,k==1,无法操作,就输出no,k>1可以操作(k==2,和swap差不多),于是可以输出yes.
// Problem: A. Halloumi Boxes
// Contest: Codeforces - Codeforces Round 912 (Div. 2)
// URL: https://codeforces.com/contest/1903/problem/A
// Memory Limit: 256 MB
// Time Limit: 1000 ms
//
// Powered by CP Editor (https://cpeditor.org)
#include <iostream>
#include <cstring>
#include <iomanip>
#include <ctime>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <vector>
#include <stack>
#include <map>
#include <set>
#include <bitset>
#include <queue>
#define eps 1e-5
#define INF 1e9
using namespace std;
typedef long long ll;
const int N = 2e6 + 9;
int a[N];
void solve() {
bool flag=true;
int n,k;
cin>>n>>k;
for(int i=1;i<=n;i++){
cin>>a[i];
}
for(int i=1;i<=n-1;i++){
if(a[i]>a[i+1]){
flag=false;
}
}
if(flag){
cout<<"YES"<<'\n';
return;
}
if(!flag && k>=2){
cout<<"YES"<<'\n';
}else{
cout<<"NO"<<'\n';
}
}
int main() {
ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
int q;
cin >> q;
while (q--) {
solve();
}
return 0;
}
B.分析完发现,只要把方阵的值拿过来,再判断一下能不能成立即可。要怎么把方阵的值拿过来呢,用全集&方阵的值就可以把方阵的值复制到目标数组了。因此将目标数组都赋到全集。就可以进行方阵拿过来这一操作了,数据范围pow(2,30),所以左移30位就是全集.
// Problem: B. StORage room
// Contest: Codeforces - Codeforces Round 912 (Div. 2)
// URL: https://codeforces.com/contest/1903/problem/B
// Memory Limit: 256 MB
// Time Limit: 2000 ms
//
// Powered by CP Editor (https://cpeditor.org)
#include <iostream>
#include <cstring>
#include <iomanip>
#include <ctime>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <vector>
#include <stack>
#include <map>
#include <set>
#include <bitset>
#include <queue>
#define eps 1e-5
#define INF 1e9
using namespace std;
typedef long long ll;
const int N = 1e3+9;
int a[N][N];
int qs[N];
int c[N];
void solve(){
int n;
cin>>n;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
cin>>a[i][j];
}
}
for(int i=1;i<=n;i++){
qs[i]=(1<<30)-1;
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(i!=j){
qs[i]&=a[i][j];
qs[j]&=a[i][j];
}
}
}
bool ok =true;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(i!=j && ((qs[i]|qs[j])!=a[i][j])){
ok=false;
}
}
}
if(!ok){
cout<<"NO"<<'\n';
}else{
cout<<"YES"<<'\n';
for(int i=1;i<=n;i++){
cout<<qs[i]<<" ";
}
cout<<'\n';
}
}
int main() {
ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
int q;
cin >> q;
while (q--) {
solve();
}
return 0;
}
文章讲述了在Codeforces竞赛中两个问题的解决方案,涉及判断数组是否升序和如何处理方阵的复制操作。第一题要求检查数组是否能通过交换元素保持升序,第二题则涉及全集操作来复制方阵到目标数组。
772





