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

【感慨】

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

相关推荐
bIo7lyA8v8 小时前
算法稳定性分析中的输入扰动建模的技术9
算法
CoderCodingNo8 小时前
【GESP】C++三级真题 luogu-B4499, [GESP202603 三级] 二进制回文串
数据结构·c++·算法
sinat_286945198 小时前
AI Coding 时代的 TDD:从理念到工程落地
人工智能·深度学习·算法·tdd
ASKED_20198 小时前
从排序到生成:腾讯广告算法大赛 2025 baseline解读
人工智能·算法
田梓燊9 小时前
leetcode 160
算法·leetcode·职场和发展
_深海凉_9 小时前
LeetCode热题100-颜色分类
python·算法·leetcode
网安INF9 小时前
数据结构第三章:栈、队列和数组
数据结构
hetao17338379 小时前
2026-04-09~12 hetao1733837 的刷题记录
c++·算法
6Hzlia9 小时前
【Hot 100 刷题计划】 LeetCode 136. 只出现一次的数字 | C++ 哈希表&异或基础解法
c++·算法·leetcode
MWWZ10 小时前
最近的一些软件更新
opencv·算法·计算机视觉