ABC357

A

link

循环加每一个数,加到哪个数不能加了输出前一个数,注意如果加到最后还能加,记得输出\(n\)

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

using namespace std;

int n,m;
int h[105],sum;

signed main(){
	
	cin >> n >> m;
	for(int i = 1;i <= n;++ i)
		cin >> h[i];
	
	for(int i = 1;i <= n;++ i){
		sum += h[i];
		if(sum > m){
			cout << i-1 << endl;
			return 0;
		}
	}
	
	cout << n << endl;
	
	return 0;
	
} 

B

link

输入时顺便存一下有几个大写字母几个小写字母,判断输出即可。

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

using namespace std;

char s[105];
int n;
int bl,sl;

signed main(){
	
	cin >> s+1;
	n = strlen(s+1);
	
	for(int i = 1;i <= n;++ i){
		if(s[i] >= 'A'&&s[i] <= 'Z') bl++;
		else sl++;
	}
	
	if(bl > sl){
		for(int i = 1;i <= n;++ i){
			if(s[i] >= 'a'&&s[i] <= 'z')
				s[i] = s[i]-'a'+'A';
		}
	}
	else{
		for(int i = 1;i <= n;++ i){
			if(s[i] >= 'A'&&s[i] <= 'Z') 
				s[i] = s[i]-'A'+'a';
		}
	}
	
	cout << s+1;
	
	return 0;
	
} 

C

link

对于\(3^k*3^k\)的方块,递归四周八个\(3^{k-1}*3^{k-1}\)的方块,最中间的循环赋值。
注意边界。

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

using namespace std;

int n;
char s[750][750];
int th;

void dfs(int k,int l,int r,int x,int y){
	if(k == 0){
		s[r][y] = '#';
		return;
	}
	int lr = (r-l+1)/3;
	int xy = (y-x+1)/3;
	for(int i = lr+l;i <= lr*2+l-1;++ i){
		for(int j = xy+x;j <= xy*2+x-1;++ j){
			s[i][j] = '.';
		}
	}
	dfs(k-1,l,l+lr-1,x,x+xy-1);
	dfs(k-1,l,l+lr-1,x+xy,x+xy*2-1);
	dfs(k-1,l,l+lr-1,x+xy*2,y);
	dfs(k-1,l+lr,l+lr*2-1,x,x+xy-1);
	dfs(k-1,l+lr,l+lr*2-1,x+xy*2,y);
	dfs(k-1,l+lr*2,r,x,x+xy-1);
	dfs(k-1,l+lr*2,r,x+xy,x+xy*2-1);
	dfs(k-1,l+lr*2,r,x+xy*2,y);
}

signed main(){
	
	cin >> n;
	
	th = 1;
	for(int i = 1;i <= n;++ i) th *= 3;
	
	dfs(n,1,th,1,th);
	
	for(int i = 1;i <= th;++ i){
		for(int j = 1;j <= th;++ j)
			cout << s[i][j];
		cout << endl;
	}
	
	return 0;
	
}

D

link

\(k\)\(n\)的位数,那么要求的数就是\(n*1+n*10^k+n*10^{2k}+……+n*10^{(n-1)k}\),也就是\(n(1+10^k+10^{2k}+……+10^{(n-1)k})\)
观察\(1+10^k+10^{2k}+……+10^{(n-1)k}\),我们可以发现,它是一个公比为\(10^k\)等比数列
运用求和公式,\(n(1+10^k+10^{2k}+……+10^{(n-1)k}) = \frac{n(10^{nk}-1)}{10^k-1}\)
求出这个数即可(除法要用逆元)。

简单介绍一下逆元:
在模数为质数的情况下,除以\(x\)等于乘以\(x^{p-2}\)\(p\)为模数)。

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

#define int __int128
#define md 998244353

using namespace std;

int n;

int read(){
	int x = 0,y = 1;
	char ch = getchar();
	while(ch < '0'||ch > '9'){
		if(ch == '-') y = -1;
		ch = getchar();
	}
	while(ch >= '0'&&ch <= '9'){
		x = x*10+ch-48;
		ch = getchar();
	}
	return x*y;
}

void print(int x){
	if(x < 0){
		cout << '-';
		x = -x;
	}
	if(x > 9) print(x/10);
	putchar(x%10+'0');
}

int dig(int x){
	int ans = 0;
	while(x){
		ans++;
		x /= 10;
	}
	return ans;
}

int pw(int a,int x){
	if(x == 0) return 1;
	int z = pw(a,x/2);
	z *= z;
	z %= md; 
	if(x%2) z *= a; 
	return z%md;
}

int inv(int a,int b,int p){	
	int k = pw(b,p-2);
	return a%md*k%md;
}

signed main(){
	
	n = read();
	
	int k = dig(n);
	
	//(n10^nk-n)/(10^k-1)
	
	//第一个目标n10^nk-n
	
	int t = pw(10,n*k)*n%md-n;
	t = (t%md+md)%md; 
	
	//第二个目标10^k-1
	
	int tt = pw(10,k)-1;
	tt = (tt%md+md)%md;
	
	//第三个目标答案
	
	print(inv(t,tt,md));
	
	return 0;
	
}
posted @ 2024-06-13 13:29  校牌杀手  阅读(6)  评论(0编辑  收藏  举报