第一题第二题ac 第三题来不及做了 第二天继续写,给的案例通过了,其他的就不知道了。
很多人输入数出有遇到麻烦,这种形式的输入输出对于c++真的太不友好了,好麻烦。。不过acm模式经常这样,还是要多多联系做好准备啊。
第一题:幸运员工抽奖
从团队中选出整个工号中含有数字7或者工号是7的倍数的员工。
输入:一组空格分隔的员工工号列表。
输出:幸运员工总人数,未找到时输出0。
#include<iostream>
#include<stdlib.h>
#include<vector>
#include<string>
using namespace std;
vector<int> split(string str, string pattern){
string::size_type pos;
vector<int> result;
str += pattern;
int size = str.size();
for(int i = 0; i < size; i++){
pos = str.find(pattern, i);
if(pos < size){
string s = str.substr(i, pos - i);
result.push_back(stoi(s));
i = pos + pattern.size() - 1;
}
}
return result;
}
bool fun(int num){
string str = to_string(num);
for(int i = 0; i < str.size(); i++){
if(str[i] == '7'){
return true;
}
}
return false;
}
int main(){
string input = "";
getline(cin, input);
//input = "7 17 27 35 8 49 50";
vector<int> vec = split(input, " ");
int result = 0;
for(auto it: vec){
if(it % 7 == 0){
result++;
}
else{
if(fun(it)){
result++;
}
}
}
//cout<<vec.size()<<endl;
cout<<result<<"\n";
return 0;
} 第二题:货运装箱问题
货轮最大重量C,有N个集装箱,每个集装箱重量W(i),对应货物价值V(i)。求货轮不超过最大载重的前提下装载货物总价值最大。
输入:第一行最大重量C,第二行每个集装箱重量W(i),第三行每个集装箱价值V(i)。
输出:货物总价值。
#include<iostream>
#include<stdlib.h>
#include<vector>
#include<string>
using namespace std;
vector<int> split(string str, string pattern){
string::size_type pos;
vector<int> result;
str += pattern;
int size = str.size();
for(int i = 0; i < size; i++){
pos = str.find(pattern, i);
if(pos < size){
string s = str.substr(i, pos - i);
result.push_back(stoi(s));
i = pos + pattern.size() - 1;
}
}
return result;
}
int main(){
int bagweight = 0;
string input1;
string input2;
cin>>bagweight;
cin>>input1;
cin>>input2;
vector<int> weight = split(input1, ",");
vector<int> value = split(input2, ",");
vector<int> dp(bagweight + 1, 0);
for(int i = 0; i < weight.size(); i++){
for(int j = bagweight; j >= weight[i]; j--){
dp[j] = max(dp[j], dp[j - weight[i]] + value[i]);
}
}
cout<<dp[bagweight]<<endl;
return 0;
} 第三题:最短路径
图像从传感器到输出JPEG格式图片经过很多node处理,这些node构成一个图像处理的pipeline,其中的有些节点依赖于其他节点输出。A->B表示B的执行依赖于A。
假设每个node执行时间为A(t),即node A需要执行t秒,没有依赖的node可以并行执行。编写一个方法输入一个有向无环图pipeline,输出执行完需要的最短时间。
输入:第一行输入node的执行时间,第二行输入node的依赖关系。
输出:最短时间。
#include<iostream>
#include<stdlib.h>
#include<vector>
#include<string>
#include <algorithm>
using namespace std;
vector<int> split(string str, string pattern){
string::size_type pos;
vector<int> result;
str += pattern;
int size = str.size();
for(int i = 0; i < size; i++){
pos = str.find(pattern, i);
if(pos < size){
string s = str.substr(i, pos - i);
result.push_back(stoi(s));
i = pos + pattern.size() - 1;
}
}
return result;
}
vector<string> split2(string str, string pattern){
string::size_type pos;
vector<string> result;
str += pattern;
int size = str.size();
for(int i = 0; i < size; i++){
pos = str.find(pattern, i);
if(pos < size){
string s = str.substr(i, pos - i);
result.push_back(s);
i = pos + pattern.size() - 1;
}
}
return result;
}
int main(){
string input1;
string input2;
//cin>>input1;
//cin>>input2;
input1 = "3,1,2,5,3,1";
input2 = "2,3,4;5;5,6;0;6;0";
vector<int> time = split(input1, ",");
vector<string> str_relation = split2(input2, ";");
vector<vector<int>> relation;
for(auto it: str_relation){
vector<int> temp;
temp = split(it, ",");
relation.push_back(temp);
}
int num_node = time.size();
vector<int> ceng(num_node + 1, 1);
ceng[0] = 0;
int count = 1;
for(auto i: relation){
for(auto j: i){
if(j == 0){
break;
}
ceng[j] = ceng[count] + 1;
}
count++;
}
vector<int> result_time(num_node + 1, 0);
int max_ceng = *max_element(ceng.begin(), ceng.end());
//cout<<max_ceng;
for(int i = 1; i <= max_ceng; i++){ //从第一层到最大层 逐层遍历
for(int j = 1; j < ceng.size(); j++){ //遍历所有节点
if(ceng[j] == i){ //如果是第i层的节点
int last_time = INT_MIN; //上层所有节点的最大执行时间
for(int m = 0; m < relation.size(); m++){
vector<int> temp = relation[m];
for(auto n: temp){
if(n == j && result_time[m + 1] > last_time){ //说明j节点依赖于m 并且 被依赖的m节点执行时间更长
last_time = result_time[m + 1];
}
}
}
if(last_time == INT_MIN){
result_time[j] = time[j - 1];
}
else{
result_time[j] = last_time + time[j - 1];
}
}
}
}
int result = INT_MIN;
for(int i = 1; i <= ceng.size(); i++){
if(ceng[i] == max_ceng && result_time[i] > result){
result = result_time[i];
}
}
cout<<result<<"\n";
return 0;
}
全部评论
(3) 回帖