深信服--厨师造饭
主要是输入很烦,是将回车键做为分隔符。
1 #include<iostream> 2 #include<vector> 3 #include<map> 4 #include<stdio.h> 5 using namespace std; 6 7 int getRes(vector<int> init) { 8 // 用一个map吧 9 map<int, int> mord; 10 int i = 0; 11 int res = 0; 12 while (init[i] != 7) { 13 if (mord.size() < 3) { // 灶台还没有三个 0,1,2,数字越大越久 14 mord.insert(make_pair(init[i], 2 - mord.size())); 15 } 16 else { 17 if (mord.count(init[i]) > 0) { // 如果灶台有这个锅 18 // 比它小的加1,自己置为0 19 map<int, int>::iterator it = mord.begin(); 20 for (; it != mord.end(); ++it) { 21 if (it->second < mord[init[i]]) { 22 it->second++; 23 } 24 } 25 mord[init[i]] = 0; 26 } 27 else { // 如果没有这个锅 28 // 删除数字最大的,其他的加1,最后插入新元素并为0 29 map<int, int>::iterator it = mord.begin(); 30 for (; it != mord.end(); ++it) { 31 if (it->second == 2) { 32 mord.erase(it); 33 break; 34 } 35 } 36 for (it = mord.begin(); it != mord.end(); ++it) { 37 it->second++; 38 } 39 mord.insert(make_pair(init[i], 0)); 40 res += 6; 41 } 42 } 43 ++i; 44 res += 15; 45 } 46 return res; 47 } 48 49 int main() { 50 vector<int> init; 51 char c; 52 while((c=getchar())) { 53 if (c != '\n') { 54 init.push_back(static_cast<int>(c - '0')); 55 } 56 if (c == '7') break; 57 } 58 int a = getRes(init); 59 cout << a; 60 }
心之所愿,永不相忘