20180908网易NLP算法工程师机试题(香槟塔)
#include<iostream>
#include<vector>
#include<string>
#include<sstream>
#include<algorithm>
using namespace std;
struct Cup{
int cur;
int vol;
Cup() : cur(0), vol(0){}
};
void parse(string& query, vector<int>& q){
stringstream ss(query);
string num;
while (ss >> num){
q.push_back(atoi(num.c_str()));
}
}
void do_query(vector<Cup>& nums, vector<int>& q){
int pos = q[1] - 1;
cout << nums[pos].cur << endl;
}
void do_water(vector<Cup>& nums, vector<int>& q){
int i = q[1] - 1;
int water = q[2];
while (i < nums.size() && water > 0){
int cur = nums[i].cur + water;
nums[i].cur = min(cur, nums[i].vol);
water = max(0, cur - nums[i].vol);
i++;
}
}
void process(vector<Cup>& nums, vector<int>& q){
if (q.size() == 2){
do_query(nums, q);
}
else{
do_water(nums, q);
}
}
int main(){
int n, m;
cin >> n >> m;
vector<Cup> nums(n);
for (int i = 0; i < n; i++){
cin >> nums[i].vol;
}
cin.ignore();
for (int i = 0; i < m; i++){
string query;
getline(cin, query);
vector<int> q;
parse(query, q);
process(nums, q);
}
system("pause");
return 0;
}