ABC356

A

link

\(1\) ~ \({l-1}\)\({r+1}\) ~ \(n\)部分顺序输出\(l\)~\(r\)部分逆序输出。

点击查看代码
#include<bits/stdc++.h>

using namespace std;

int n,l,r;

signed main(){
	
	cin >> n >> l >> r;
	for(int i = 1;i < l;++ i)
		cout << i << " ";
	for(int i = r;i >= l;-- i)
		cout << i << " ";
	for(int i = r+1;i <= n;++ i)
		cout << i << " ";
	
	return 0;
	
}

B

link

把摄入的所有营养分类加起来(竖着加)与\(a_i\)作比较。

点击查看代码
#include<bits/stdc++.h>

using namespace std;

int n,m;
int a[105];
int x[105];

signed main(){
	
	cin >> n >> m;
	for(int i = 1;i <= m;++ i)
		cin >> a[i];
	for(int i = 1;i <= n;++ i)
		for(int j = 1;j <= m;++ j){
			int x1;
			cin >> x1;
			x[j] += x1;
		} 
	
	for(int i = 1;i <= m;++ i)
		if(a[i] > x[i]){
			cout << "No";
			return 0; 
		}
	
	cout << "Yes";
	
	return 0;
	
}

C

link

深搜每一种可能,判断符不符合条件。(每个条件算这些钥匙中实钥匙的个数,够/不够\(K\)个就行)

点击查看代码
#include<bits/stdc++.h>

using namespace std;

int n,m,k;
int ans;
int c[105];
int a[105][25];
char r[105];
int cn,q[25];

void dfs(int x){
	
	if(x > n){
		for(int i = 1;i <= m;++ i){
			int t = 0;
			for(int j = 1;j <= c[i];++ j){
				if(q[a[i][j]] == 1) t++;
			}
			if(t >= k&&r[i] == 'x'
			||t < k&&r[i] == 'o'){
				return;
			}
		}
		ans++;
		return;
	}
	
	q[x] = 0;
	dfs(x+1);
	q[x] = 1;
	dfs(x+1);
	
}

signed main(){
	
	cin >> n >> m >> k;
	
	for(int i = 1;i <= m;++ i){
		cin >> c[i];
		for(int j = 1;j <= c[i];++ j)
			cin >> a[i][j];
		cin >> r[i];
	}
	
	dfs(1);
	
	cout << ans;
	
	return 0;
	
}

D

link

首先,把\(M\)转为二进制。
再看一下\(0\)~\(10\)的二进制

0 0000
1 0001
2 0010
3 0011
4 0100
5 0101
6 0110
7 0111
8 1000
9 1001
10 1010

如果从左到右定义为\(0\)\(1\)\(2\)……位,我们可以发现,第\(i\)位是\(2^i\)\(0\)\(2^i\)\(1\)交替构成。
对于\(M\)的每一位,如果是\(0\)什么也不用考虑,与任何东西与都还是\(0\),而对于\(1\)而言,求出这一位上\(0\) ~ \(n\)中有多少个\(1\)即可。

点击查看代码
#include<bits/stdc++.h>

#define int long long
#define md 998244353

using namespace std;

int n,m;
int a[65];
int ans;

signed main(){
	
	cin >> n >> m;
	
	int t = m,cn = 0;
	while(t){
		a[cn] = t&1;
		t >>= 1;
		cn++;
	}
	cn--;
	
	for(int i = 0,q = 1;i <= cn;++ i,q *= 2){
		if(a[i] == 0) continue;
		int xh = (n+1)/(q*2);
		ans += xh%md*q%md;
		ans %= md;
		int sy = (n+1)%(q*2);
		if(sy > q) ans += sy-q,ans %= md;
	}
	
	cout << ans;
	
	return 0;
	
}
posted @ 2024-06-07 19:49  校牌杀手  阅读(16)  评论(0编辑  收藏  举报