30.模拟队列
描述:

思想:这里可以使用vector来保存队列中的元素,对于异或和,可以每一次push元素都和当前的和异或以下,然后pop的时候,再用出队列的这个元素和当前的和异或以下,两次相同元素的异或和为0,这样就可以正确记录当前存在与队列中的全部元素的异或和了。注意输入的数据在1~10^9,因此数据类型用long long的类型。
代码:
#include <bits/stdc++.h>
using namespace std;
class myque{
private:
int begin;
int end;
vector<long long> que;
long long sum;
public:
myque(int b = 0,int e = 0,long long s = 0):begin(b),end(e),sum(s){
que.resize(100000);
// sum.resize(100000);
}
long long mypush(long long x){
que[end++] = x;
sum ^= x;
return end - begin;
}
long long mypop(){
if(begin == end){
return -1;
}
sum ^= que[begin];
return que[begin++];
}
long long myclear(){
begin = 0;
end = 0;
int tmp = sum;
sum = 0;
return tmp;
}
};
int main() {
int q;
myque que;
cin >> q;
string str;
getline(cin, str);
while(q--){
getline(cin, str);
if(str.find("PUSH") != string::npos){
int ind = str.find(" ");
long long num = atoi(str.substr(ind+1).c_str());
cout << que.mypush(num) << endl;
}else if("POP" == str){
cout << que.mypop() << endl;
}else{
cout << que.myclear() << endl;
}
}
return 0;
}

浙公网安备 33010602011771号