20240417-暑期实习

第1题-扑克牌-栈

#include<bits/stdc++.h>
#define Maxn 55

using namespace std;

void solve(){
	int n, m;
	cin>>n;
	vector<string> cards;
	for(int i = 0; i < n; i++){
		string str;
		cin>>str;
		cards.push_back(str);
		m = cards.size();
		while(m >= 3 && cards[m-1] == cards[m-2] && cards[m-1] == cards[m-3]){
			for(int j = 0; j < 3; j++) cards.pop_back();
			m = cards.size();
		}
	}
	m = cards.size();
	if(m == 0) {cout<<0; return ;}
	for(int i = 0; i < m; i++) cout<<cards[i]<<' ';
}


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

第2题-云上服务-DFS

#include<bits/stdc++.h>
#define Maxn 1001

using namespace std;

map<string, vector<string>> edg;
map<string, int> sum_critical;
map<string, int> sum_normal;

int dfs(string node){
	int sum =  5*sum_critical[node] + 2*sum_normal[node];
	for(string child : edg[node]){
		sum += dfs(child);
	}
	return sum;
}

void solve(){
	int m, n, res;
	cin>>m>>n;
	for(int i = 0; i < n; i++){
		string edgs, edgt; 
		int type, sum;
		cin>>edgt>>edgs>>type>>sum;
		if(type == 0) sum_critical[edgt] += sum;
		if(type == 1) sum_normal[edgt] += sum;
		if(find(edg[edgs].begin(), edg[edgs].end(), edgt) == edg[edgs].end())
			edg[edgs].push_back(edgt);
	}
	
	for(string root : edg["*"]){
		int Di = dfs(root);
		if(Di > m) res++;
	}
	cout<<res;
}


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

第3题-服务逃生(隐藏)-最短路

#include<bits/stdc++.h>
#define Maxn 10000
#define INF 1e7

using namespace std;

int n;
int dist[Maxn+1], cap[Maxn+1];
int flag[Maxn+1], matrix[Maxn+1][Maxn+1];

void dijstra(int fnode){
	for(int i = 0; i < n; i++) dist[i] = matrix[fnode][i];
	flag[fnode] = 1;
	dist[fnode] = 0; 
	
	for(int i = 0; i < n-1; i++){
		int temp = -1;
		for(int j = 0; j < n; j++){
			if(!flag[j] && (temp == -1 || dist[j] < dist[temp])) temp = j;
		}
		flag[temp] = 1;
		for(int j = 0; j < n; j++) dist[j] = min(dist[j], dist[temp] + matrix[temp][j]);
	}
	
	dist[fnode] = INF;
}


void solve(){
	cin>>n;
	for(int i = 0; i < n; i++)
		for(int j = 0; j < n; j++){
			cin>>matrix[i][j];
			if(matrix[i][j] == -1) matrix[i][j] = INF;
			if(i == j) matrix[i][j] = 0;
		}
	for(int i = 0; i < n; i++) cin>>cap[i];
	int fnode, M; 
	cin>>fnode>>M; 
	dijstra(fnode);
	array<int, 3> nodes[n];
	for(int i = 0; i < n; i++) nodes[i] = {dist[i], i, cap[i]};
	sort(nodes, nodes+n);
	int sum = 0, temp = 0;
	while(sum < M && temp < n-1){
		sum += nodes[temp][2];
		cout<<nodes[temp][1]<<' ';
		temp++;
	}
}


int main(){
	solve();
	return 0;
}
posted @ 2025-03-26 00:09  zerolt  阅读(6)  评论(0)    收藏  举报