CSP第33次认证题解

【词频统计】

cpp 复制代码
#include<iostream>
#include<vector>
using namespace std;

int main() {
	int n, m;
	cin >> n >> m;
	
	vector<int> x(n+1, 0), y(n+1, 0);
	for(int i = 0; i < n; i++) {
		int l;
		cin >> l;
		vector<bool> f(n+1, true);
		for(int j = 0; j < l; j++) {
			int num;
			cin >> num;
			y[num]++;
			if(f[num]) {
				x[num]++;
				f[num] = false;
			}
		}
	}
	
	for(int i = 1; i <= m; i++) {
		cout << x[i] << " " << y[i] << endl;
	}
	return 0;
}

【相似度计算】

cpp 复制代码
#include<iostream>
#include<string>
#include<map>
using namespace std;

void toLower(string &s) {
	for(char &c : s) {
		c = tolower(c);
	}
}
int main() {
	int n, m;
	cin >> n >> m;
	
	int ans1 = 0, ans2 = 0;
	map<string, int> s1;
	map<string, int> s2;
	map<string, int> visited;
	while(n--) {
		string word;
		cin >> word;
		toLower(word);
		s1[word] = 1;
	}
	while(m--) {
		string word;
		cin >> word;
		toLower(word);
		s2[word] = 1;
		if(s1.count(word)&&!visited.count(word)) {
			ans1++;
			visited[word] = 1;
		}
	}
	
	ans2 = s1.size()+s2.size()-ans1;
	
	cout << ans1 << endl;
	cout << ans2 << endl;
	return 0;
}

【化学方程式配平】

cpp 复制代码
#include<iostream>
#include<string>
#include<vector>
#include<map>
#include<cmath>
using namespace std;

void solve() {
	int m;
	cin >> m;
	
	vector<vector<float>> A(40, vector<float>(m, 0));
	map<string, int> visited;
	
	int rank = 0;
	for(int i = 0; i < m; i++) {
		string str;
		cin >> str;
		string eltmt = "";
		string key;
		float index = 0;
		bool lastCh = true;
		for(char c : str) {
			if(c <= 'z' && c >= 'a') {
				if(!lastCh) {
					lastCh = true;
					if(visited.count(key)) {
						A[visited[key]][i] = index;
					} else {
						A[rank][i] = index;
						visited[key] = rank;
						rank++;
					}
					index = 0;
				}
				eltmt += c;
			} else {
				if(lastCh) {
					lastCh = false;
					key = eltmt;
					eltmt = "";
				}
				index = index*10 + (c-'0');
			}
		}
		if(visited.count(key)) {
			A[visited[key]][i] = index;
		} else {
			A[rank][i] = index;
			visited[key] = rank;
			rank++;
		}
	}
	
	int startI = 0;
	int startJ = 0;
	int k = m;
	while(k--) {
		bool zeroJ = true;
		for(int i = startI; i < rank; i++) {
			if(A[i][startJ] != 0) zeroJ = false;
		}
		if(zeroJ) {
			startJ++;
		} else {
			if(A[startI][startJ] == 0) {
				int r;
				for(int i = startI; i < rank; i++) {
					if(A[i][startJ] != 0) r = i;
				}
				for(int j = startJ; j < m; j++) {
					swap(A[startI][j], A[r][j]);
				}
			}
			for(int i = startI+1; i < rank; i++) {
				float multi = A[i][startJ]/A[startI][startJ];
				for(int j = startJ; j < m; j++) {
					A[i][j] -= A[startI][j]*multi;
				}
			}
			startI++;
			startJ++;
		}
	}
	
	for(int i = 0; i < rank; i++) {
		for(int j = 0; j < m; j++) {
			if(fabs(A[i][j])< 0.1) A[i][j] = 0;
		}
	}
	int rk = rank;
	for(int i = rank-1; i >= 0; i--) {
		bool f = true;
		for(int j = 0; j < m; j++) {
			if(A[i][j] != 0) {
				f = false;
			}
		}
		if(f) rk--;
	}
	
	
	if(rk < m) cout << "Y" << endl;
	else   cout << "N" << endl;
}
int main() {
	int n;
	cin >> n;
	
	while(n--) {
		solve();
	}
	
	return 0;
}

【感慨】

上面的题目都是自己独立做出来的,真的很有成就感,明显感觉到自己代码能力的提升,谁懂啊,真的开心极了😊

相关推荐
程与留2 分钟前
05_Qt 核心模块概览——Qt Core、Gui、Widgets、Quick 的职责划分
c++·qt
buhuizhiyuci37 分钟前
【QT-百日筑基篇】修真世界摸爬滚打多年,终于黄天不负有心人,突破炼器中期——常用控件QWight的属性
开发语言·c++·qt·gui·图形化
小雪崩1 小时前
嵌入式学习 day25:哈希表及排序与查找
linux·c语言·数据结构·学习·排序算法
白露与泡影1 小时前
解密 Pi 的 Harness 工程:Agent 会话如何实现持久化与恢复
java·人工智能·算法
happyprince3 小时前
01-整体观-Codex全貌解读(源码)
算法·ai编程
俊基科技3 小时前
别自己写算法了,让这颗37.5毫米的模组替你“闭嘴干活”
神经网络·算法·硬件开发·ai降噪·语音模块·回音消除
_Narcissus_4 小时前
动态规划初探(含完整代码实现)
c语言·数据结构·c++·算法·动态规划·背包问题·最短路径
世人万千丶4 小时前
鸿蒙项目实战 - 社区活动编排板:标签云布局算法与自动换行
学习·算法·华为·harmonyos·鸿蒙
zander2584 小时前
LeetCode 279. 完全平方数
算法·深度优先