UVA 11995 I Can Guess the Data Structure!
2016-07-01 00:03
274 查看
这题就是让你用 队列,栈,和优先队列分别实现给你的询问。
我直接用的sql实现的,比较简单吧。
AC代码:
/* ***********************************************
Author :yzkAccepted
Created Time :2016/6/30 19:57:59
TASK :ggfly.cpp
LANG :C++
************************************************ */
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>
#include <queue>
#include <set>
#include <map>
#include <string>
#include <cmath>
#include <cstdlib>
#include <ctime>
#include <stack>
using namespace std;
int m;
struct node{
int v, k;
friend bool operator < (node a,node b){
return a.v<b.v;
}
}s[1000+100];
bool Isqueue()
{
queue<int> my;
for(int i=1;i<=m;i++){
if(s[i].k==1)
my.push(s[i].v);
if(s[i].k==2){
if(my.empty()==1)
return 0;
if(my.front()==s[i].v){
my.pop();
continue;
}
else return 0;
}
}
return 1;
}
bool Isstack()
{
stack<int> my;
for(int i=1;i<=m;i++)
{
if(s[i].k==1)
my.push(s[i].v);
if(s[i].k==2){
if(my.empty()==1)
return 0;
if(my.top()==s[i].v){
my.pop();
continue;
}
else return 0;
}
}
return 1;
}
bool Ispriqueue()
{
priority_queue<node> my;
for(int i=1;i<=m;i++){
if(s[i].k==1)
my.push(s[i]);
if(s[i].k==2){
if(my.empty()==1)
return 0;
if(my.top().v==s[i].v){
my.pop();
continue;
}
else return 0;
}
}
return 1;
}
int main()
{
//freopen("in.txt","r",stdin);
//freopen("out.txt","w",stdout);
int i;
while(~scanf("%d",&m))
{
for(i=1;i<=m;i++)
scanf("%d%d",&s[i].k,&s[i].v);
int queue,stack,pq;
queue=Isqueue();
// cout<<queue<<endl;
stack=Isstack();
pq=Ispriqueue();
if(queue+stack+pq>1)
cout<<"not sure"<<endl;
else if(queue) printf("queue\n");
else if(stack) printf("stack\n");
else if(pq) printf("priority queue\n");
else printf("impossible\n");
//cout<<queue<<stack<<pq<<endl;
}
return 0;
}
我直接用的sql实现的,比较简单吧。
AC代码:
/* ***********************************************
Author :yzkAccepted
Created Time :2016/6/30 19:57:59
TASK :ggfly.cpp
LANG :C++
************************************************ */
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>
#include <queue>
#include <set>
#include <map>
#include <string>
#include <cmath>
#include <cstdlib>
#include <ctime>
#include <stack>
using namespace std;
int m;
struct node{
int v, k;
friend bool operator < (node a,node b){
return a.v<b.v;
}
}s[1000+100];
bool Isqueue()
{
queue<int> my;
for(int i=1;i<=m;i++){
if(s[i].k==1)
my.push(s[i].v);
if(s[i].k==2){
if(my.empty()==1)
return 0;
if(my.front()==s[i].v){
my.pop();
continue;
}
else return 0;
}
}
return 1;
}
bool Isstack()
{
stack<int> my;
for(int i=1;i<=m;i++)
{
if(s[i].k==1)
my.push(s[i].v);
if(s[i].k==2){
if(my.empty()==1)
return 0;
if(my.top()==s[i].v){
my.pop();
continue;
}
else return 0;
}
}
return 1;
}
bool Ispriqueue()
{
priority_queue<node> my;
for(int i=1;i<=m;i++){
if(s[i].k==1)
my.push(s[i]);
if(s[i].k==2){
if(my.empty()==1)
return 0;
if(my.top().v==s[i].v){
my.pop();
continue;
}
else return 0;
}
}
return 1;
}
int main()
{
//freopen("in.txt","r",stdin);
//freopen("out.txt","w",stdout);
int i;
while(~scanf("%d",&m))
{
for(i=1;i<=m;i++)
scanf("%d%d",&s[i].k,&s[i].v);
int queue,stack,pq;
queue=Isqueue();
// cout<<queue<<endl;
stack=Isstack();
pq=Ispriqueue();
if(queue+stack+pq>1)
cout<<"not sure"<<endl;
else if(queue) printf("queue\n");
else if(stack) printf("stack\n");
else if(pq) printf("priority queue\n");
else printf("impossible\n");
//cout<<queue<<stack<<pq<<endl;
}
return 0;
}
相关文章推荐
- 1.10055 - Hashmat the brave warrior
- 2.10071 - Back to High School Physics
- 3.458 - The Decoder
- 4.694 - The Collatz Sequence
- 6.494 - Kindergarten Counting Game
- 7.490 - Rotating Sentences
- 8.414 - Machined Surfaces
- 9.488 - Triangle Wave
- A.457 - Linear Cellular Automata
- B.489 - Hangman Judge
- C.445 - Marvelous Mazes
- 1.10494 - If We Were a Child Again
- 2.424 - Integer Inquiry
- 3.10250 - The Other Two Trees
- 5.465 - Overflow
- 6.113 - Power of Cryptography
- 7.10161 - Ant on a Chessboard
- 8.621 - Secret Research
- 9.401 - Palindromes
- A.537 - Artificial Intelligence?