Codeforces Round 912 (Div. 2)(阴间场,补题)

文章讲述了在Codeforces竞赛中两个问题的解决方案,涉及判断数组是否升序和如何处理方阵的复制操作。第一题要求检查数组是否能通过交换元素保持升序,第二题则涉及全集操作来复制方阵到目标数组。

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;
}

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值