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;
}
咸鱼翻身失败