A1051
#include<bits/stdc++.h>
using namespace std;
const int maxn=1010;
int arr[maxn];//保存题目给定的出栈序列
stack<int> st;//定义栈st,用以存放int型元素
int main()
{
int m,n,k;
scanf("%d%d%d",&m,&n,&k);
while(k--)
{
//先把用过的栈清空
while(!st.empty())
{
st.pop();
}
//输入题目给定的出栈序列
for(int i=1;i<=n;i++)
{
scanf("%d",&arr[i]);
}
int current=1;
bool flag=true;
for(int i=1;i<=n;i++)
{
st.push(i);//按顺序将每个元素推进去,原则上入栈的元素如果恰好等于出栈序列当前等待出栈的元素,就弹出
if(st.size()>m){//存储的元素大于容量
flag=false;
break;
}
while(!st.empty()&&st.top()==arr[current])
{
st.pop();
current++;
}
}
if(st.empty()&&flag)//栈空并且flag==true表示合法
{
printf("YES\n");
}
else{
printf("NO\n");
}
}
return 0;
}
A1056
#include<bits/stdc++.h>
using namespace std;
const int maxn=1010;
struct mouse{
int weight;//质量
int rank;//排名
}mouse[maxn];
int main()
{
int np,ng,order;
scanf("%d%d",&np,&ng);
for(int i=0;i<np;i++)
{
scanf("%d",&mouse[i].weight);
}
queue<int> q;
for(int i=0;i<np;i++)
{
scanf("%d",&order);
q.push(order);
}
int temp=np,group;//temp为当前轮比赛的总老鼠数,group为组数
//当队列中没有只剩下一只老鼠时
while(q.size()!=1){
//计算group,即当前轮分为几组进行比赛
if(temp%ng==0) group=temp/ng;
else group=temp/ng+1;
for(int i=0;i<group;i++)
{
int k=q.front();
for(int j=0;j<ng;j++)
{
if(i*ng+j>=temp) break;
int front=q.front();
if(mouse[front].weight>mouse[k].weight)
{
k=front;//k求出每组老鼠最大的质量
}
mouse[front].rank=group+1;
q.pop();
}
q.push(k);//把胜利的老鼠晋级,队尾进队首出
}
temp=group;//总老鼠数等于总组数
}
mouse[q.front()].rank=1;
for(int i=0;i<np;i++)
{
printf("%d",mouse[i].rank);
if(i!=np-1) printf(" ");
}
return 0;
}