第十八届东北CCPC程序设计竞赛题解

文章目录

    • [A: Paper Watering](#A: Paper Watering)
    • [E: Checksum](#E: Checksum)
    • [L: Bracket Generation](#L: Bracket Generation)
    • [I: password(待补)](#I: password(待补))

A: Paper Watering

解题思路:

​ 该题很简单,但有一个需要考虑到的,就是当一个数 n 不是完全平方数的时候,那么他执行 1 操作之后再执行 2 操作之后,所得到的值和之前的不同,那么就需要再进行处理。

解题代码:

cpp 复制代码
void Solved() {	
	int n, k; cin >> n >> k;
	int ans = 0;
	if(n == 1){
		cout << 1 << endl;
		return ;
	}
	int temp = 0;
	while(n != 1 && temp < k) {
		temp ++;
		int t = (int)sqrt(n);
		ans ++;
		if(t * t != n && t != 1) ans += k - temp;
		n = t;
	}
	cout << ans + k + 1 << endl;
}

E: Checksum

解题思路:

​ 该题看到时间复杂度可以看出来是用的遍历,对k进行枚举,然后进行判断就行了。该题可以用到bitset,代码更简洁。

解题代码:

cpp 复制代码
void solve() {
	int n,k;
	cin >> n >> k;
	int len = 0;
	for(int i = 1; i<= n; i++){
		char a; cin >> a;
		if(a == '1') len ++;
	}
	for(int i = 0; i <= k; i++){
		int sum = len + i;
		bitset<32> d(sum);
		int dd = 0;
		for(int j = 0; j < k; j ++ )  if(d[j] == 1) dd ++;
		if(dd == i) {
			for(int j = k - 1; j >= 0; j -- ) {
				cout << d[j];
			} cout << endl;
			return ;
		}		
	}
	cout << "None" << endl;
}

L: Bracket Generation

解题思路:

​ 该题赛时没写出来。。。当时就想着怎么进行排列了,没想到顺序这回事。

因为这只有两种情况:

  1. 在序列后加一个括号
  2. 选取合法的括号,将其中括号包裹住。

那么括号的排列是有一定的顺序的,就比如那个最小的括号一定是在包裹它的括号后面,如下图所示:

​ 就上图,该图中那前两个1一定是在第一个2的后面,前四个1一定是在第二个2的前面,这个顺序是固定的,那么只要满足前面1的顺序,后面的2在后面的顺序就可以随便放了。

解题代码:

cpp 复制代码
void solve() {
	string str;
	cin >> str;
	vector<int> vec;
	vector<int> a;
	for(int i = 0; i < str.size(); i++){
		if(str[i] == ')' && str[i - 1] == '('){
			a.push_back(1);
		}else if(str[i] == ')'){
			a.push_back(2);
		}
	}
	reverse(a.begin(),a.end());
	int res = 1,cnt = 0;
	for(int i = 0; i < a.size(); i++){
		cnt ++;
		if(a[i] == 2){
			res = res * cnt % mod;
		}
	}
	cout << res << endl;
}

I: password(待补)

解题思路:
解题代码:

cpp 复制代码
相关推荐
꧁Q༒ོγ꧂4 分钟前
算法详解(三)--递归与分治
开发语言·c++·算法·排序算法
李兴球20 分钟前
这个来自五线城市的C++兴趣班的程序可不一般
c++
MQLYES38 分钟前
03-BTC-数据结构
数据结构·算法·哈希算法
White_Can1 小时前
《C++11:智能指针》
c++·c++11·智能指针
无限进步_1 小时前
【数据结构&C语言】对称二叉树的递归之美:镜像世界的探索
c语言·开发语言·数据结构·c++·算法·github·visual studio
im_AMBER1 小时前
Leetcode 98 从链表中移除在数组中存在的节点
c++·笔记·学习·算法·leetcode·链表
CSDN_RTKLIB1 小时前
C++取模与取余
开发语言·c++
星河耀银海1 小时前
C++开发入门——环境搭建与第一个程序
开发语言·c++·策略模式
高山上有一只小老虎1 小时前
灵异背包?
java·算法
s09071362 小时前
【综述】前视二维多波束成像声呐(FLS)图像处理算法全解析:从成像到深度学习
图像处理·人工智能·算法·声呐·前视多波束