1、自动贩卖机
题目
代码
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <queue>
#include <stack>
#include <algorithm>
#include <vector>
#include <iomanip>
#include <map>
#include <unordered_map>
#include "limits.h"
#include "math.h"
using namespace std;
int main(int argc, const char * argv[]) {
int n, m;
cin >> n >> m;
//每个货物槽的原始价格
int prices[n];
for(int i=0; i<n; i++){
cin >> prices[i];
}
//n个货物槽:记录可能被错放的货物的价格
vector<stack<int> > boxes;
for(int i=0; i<n; i++){
stack<int> st;
boxes.push_back(st);
}
//m个人进行操作
int k, num;
string hand, action;
while( m-- ){
cin >> k; //k次操作
int left = -1, right = -1; //左右手货物的价格
int p, totalprice = 0; //总价格
while( k-- ){
cin >> hand >> action;
if( action=="take" ){
cin >> num;
if( boxes[num-1].empty() ){
p = prices[num-1];
}else{
p = boxes[num-1].top();
boxes[num-1].pop();
}
totalprice += p;
if( hand=="left" ){
left = p;
}else{
right = p;
}
}else if( action=="return" ){
cin >> num;
if( hand=="left" ){
p = left;
left = -1;
}else{
p = right;
right = -1;
}
boxes[num-1].push(p);
totalprice -= p;
}else{ //keep
if( hand=="left" ){
left = -1;
}else{
right = -1;
}
}
}
cout << totalprice << endl;
}
return 0;
}
/*
5 3
1 2 3 4 5
5
left take 1
right take 2
left return 3
right keep
right take 4
6
left take 5
right take 1
left return 2
right return 3
left take 5
left return 4
10
left take 1
left keep
left take 2
left keep
left take 3
left keep
left take 4
left keep
left take 5
left keep
*/
2、游戏机刷新帧
题目
思路
蹲
3、迷宫
思路
4、非凡排序
题目
代码
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <queue>
#include <algorithm>
#include <vector>
#include <iomanip>
#include <map>
#include <unordered_map>
#include "limits.h"
#include "math.h"
using namespace std;
bool cmp(int a, int b){
return a > b;
}
int main(int argc, const char * argv[]) {
//输入有正有负
int n, num;
cin >> n;
vector<int> posi;
vector<int> nega;
for(int i=0; i<n; i++){
cin >> num;
if( num<0 ){
nega.push_back(num);
}else{
posi.push_back(num);
}
}
//正数更多:整个正数升序排序
//(负 正 负 正):正数逆序,负数正序 + (正...正)正数升序排序
if( posi.size() >= nega.size() ){
sort(posi.begin(), posi.end()); //升序
sort(nega.begin(), nega.end()); //升序
int i=0, j=nega.size()-1;
for(; i<nega.size(); i++,j--){
cout << nega[i] << " " << posi[j] << " ";
}
for(; i<posi.size(); i++){
cout << posi[i] << " ";
}
cout << endl;
}else{
//负数整体逆序
//(正 负 正 负):正数逆序,负数正序 + (负...负)负数逆序
sort(posi.begin(), posi.end(), cmp); //逆序
sort(nega.begin(), nega.end(), cmp); //逆序
int i=0, j=posi.size()-1;
for(; i<posi.size(); i++, j--){
cout << posi[i] << " " << nega[j] << " ";
}
for(; i<nega.size(); i++){
cout << nega[i] << " ";
}
cout << endl;
}
return 0;
}
/*
6
-2 4 -1 3 5 6
10
9 8 7 -1 -2 -3 -4 -5 -6 -7
*/