20240410暑期实习

第1题-云服务计费-嵌套字典

#include<bits/stdc++.h>
#include<map>

using namespace std;

void solve(){
	int n;
	cin>>n;
	map<string, map<string, int>> account;
	
	string str;
	for(int i=0; i < n; i++){
		cin>>str;
		stringstream ss(str);
		string str_temp;
		vector<string> table;
		while(getline(ss, str_temp, ',')) table.push_back(str_temp);
		int cur = stoi(table[3]);
		if(cur >= 0 && cur <= 100)
			account[table[1]][table[2]] += cur;
		else 
			account[table[1]][table[2]] += 0;
	}
	
	int m;
	cin>>m;
	map<string, int> unit_price;
	for(int i=0; i < m; i++){
		cin>>str;
		stringstream ss(str);
		string str_temp;
		vector<string> table;
		while(getline(ss, str_temp, ',')) table.push_back(str_temp);
		unit_price[table[0]] = stoi(table[1]);
	}
	
	map<string, map<string, int>>::iterator iter = account.begin();
	while(iter != account.end()){
		int sum = 0;
		for(auto unit = iter->second.begin(); unit != iter->second.end(); unit++){
			if(unit_price.count(unit->first))
				sum += unit_price[unit->first]*unit->second;
		}
		
		cout<<iter->first<<','<<sum<<endl;
        iter++;
	}
	
}

int main(){
	solve();
	return 0;
}

第2题-相似度计算-并查集

#include<bits/stdc++.h>
#define Maxn 901
using namespace std;

int pre[Maxn], ans[Maxn];

int find(int x){
	if(pre[x] == x) return x;
	return pre[x] = find(pre[x]);
}

void merge(int x, int y){
	int fx = find(x), fy = find(y);
	if(fx != fy) pre[fy] = fx; 
}

int cmp(int a, int b){
    return a>b;
}

void solve(){
	int n;
	cin>>n;
	int table[Maxn][Maxn];
    for(int i=1; i <=n; i++) pre[i] = i;
	for(int i=1; i <= n; i++)
		for(int j=1; j <= n; j++){
			cin>>table[i][j];
			if(i < j && table[i][j]) merge(i, j);
		}
	for(int i=1; i <= n; i++)
		for(int j=i+1; j <= n; j++)
			if(table[i][j]) ans[find(i)] += table[i][j];
	sort(ans+1, ans+n+1, cmp);
	for(int i =1; i <= n; i++){
		if(ans[i] == 0) break;
		cout<<ans[i]<<' ';
	}
	
}


int main(){
	solve();
	return 0;
}

第3题-公网下线方案-搜索(DFS/BFS)

#include <algorithm>
#include<bits/stdc++.h>
#define Maxn 30
using namespace std;

int matrix[Maxn][Maxn], vis[Maxn], n;

void dfs(int node, int p){
	vis[node] = 1;
	for(int i = 0; i < n; i++){
		if(!vis[i] && matrix[node][i] > 0 && p >= matrix[node][i]) 
			dfs(i, matrix[node][i]);
	}
}


int cmp(int a, int b){
    return a < b;
}


void solve(){
	cin>>n;
	for(int i = 0; i < n; i++)
		for(int j = 0; j < n; j++)
			cin>>matrix[i][j];
	int exposed[Maxn], siz = 0;
	int cur;
	while(cin>>cur) exposed[siz++] = cur;
	int minR = n, ansn;
    sort(exposed, exposed+siz, cmp);
	for(int i = 0; i < siz; i++){
		int curR = 0;
		memset(vis, 0, sizeof(vis));
		for(int j = 0; j < siz; j++){
			if(j == i) continue;
			dfs(exposed[j], 10);
		}
		for(int k = 1; k <= n; k++) curR += vis[k];
		if(curR < minR){
			ansn = exposed[i];
			minR = curR;
		}
	}
	cout<<ansn;
}


int main(){
	solve();
	return 0;
}

posted @ 2025-03-23 23:09  zerolt  阅读(6)  评论(0)    收藏  举报