03 April 2015

UVA 12100 - Printer Queue (STL queue and deque)

#include<cstring>
#include<iostream>
#include<queue>
#include<cstdio>
using namespace std;
const int Maxn = 100+10;

int uni[Maxn];
int n, m;
int num[10];
int ma = 0;
struct node
{
    int id, rank;
} p[110];
queue<node> q;

void deal()
{
    while(!q.empty())
    {
        q.pop();
    }
}

int main(void)
{
    int ncase;
    scanf("%d",&ncase);
    while(ncase--)
    {
        deal();
        memset(num, 0, sizeof(num));
        scanf("%d %d",&n,&m);
        int tmp;
        node now, next;
        for(int i=0; i<n; ++i)
        {
            scanf("%d",&tmp);
            ma = max(ma, tmp);
            p[i].id = i;
            p[i].rank = tmp;
            q.push(p[i]);
            num[tmp]++;
        }
        bool flag = false;
        int ans = 1;
        while(!flag)
        {
            while(1)
            {
                now = q.front() ;
                q.pop();
                if(now.rank == ma)
                {
                    ans++;
                    if(now.id == m)
                    {
                        flag = true;
                    }
                    num[ma]--;
                    while(num[ma]==0)
                    {
                        ma--;
                    }
                    break;
                }
                else
                    q.push(now);
            }
        }
        cout<<ans-1<<endl;

    }
    return 0;
}

02 April 2015

UVA 11034 - Ferry Loading IV (STL queue and deque)

#include<iostream>
#include<cstdio>
#include<stack>
#include<queue>
#include<cstring>
using namespace std  ;
int main()
{
    string jak ;
    int len ;
    queue <double> left ;
    queue <double> right ;
    int test ;
    cin>>test ;
    while(test--)
    {
        int len , m, flag ;
        double sum =0 ,r,t;
        cin>>len>>m ;
        while(m--)
        {
            cin>>r>>jak ;
            if(jak=="left")
                left.push(r) ;
            else if(jak=="right")
                right.push(r) ;
        }
        int count =0 ;
        while(1)
        {
            sum =0 ;
            flag =0 ;
            while(!left.empty())
            {
                r= left.front() ;
                t = r/100.00 ;
                flag =1 ;
                if(sum+t<=len)
                {
                    sum = sum + t ;
                    left.pop() ;
                }
                else
                    break ;
            }

        count++ ;
        if(left.empty()&&right.empty())
            break;
        sum =0 ;
        while(!right.empty())
        {
            r = right.front() ;
            t = r/100.00 ;
            flag =1 ;
            if(sum+t<=len)
            {
                sum = sum + t ;
                right.pop() ;
            }
            else
                break ;
        }
        count++ ;
        if(left.empty()&&right.empty())
            break;
        }
        printf("%d\n",count) ;
    }
    return 0 ;
}

UVA 10935 - Throwing cards away I (STL queue and deque)

#include <cstdio>
#include<iostream>
#include <queue>
using namespace std;

int main() {
int n, x;
queue<int> q;

while (scanf("%d", &n), n) {
for (int i = 1; i <= n; i++) {
q.push(i);
}

printf("Discarded cards:");
while (q.size() > 1) {
printf(" %d", q.front());
q.pop();
x = q.front();
q.pop();
if (!q.empty())
printf(",");
q.push(x);
}
printf("\nRemaining card: %d\n", q.front());
q.pop();
}
return 0 ;
}

UVA 540 - Team Queue (STL queue and deque)

#include<cstdio>
#include<queue>
#include<map>
using namespace std;

const int maxt = 1000 + 10;

int main()
{
#ifdef LOCAL
#endif
    int t, kase = 0;
    while(scanf("%d", &t) == 1 && t)
    {
        printf("Scenario #%d\n", ++kase);


        map<int, int> team;
        for(int i = 0; i < t; i++)
        {
            int n, x;
            scanf("%d", &n);
            while(n--)
            {
                scanf("%d", &x);
                team[x] = i;
            }
        }

        queue<int> q, q2[maxt];
        for(;;)
        {
            int x;
            char cmd[10];
            scanf("%s", cmd);
            if(cmd[0] == 'S') break;
            else if(cmd[0] == 'D')
            {
                int t = q.front();
                printf("%d\n", q2[t].front());
                q2[t].pop();
                if(q2[t].empty()) q.pop();
            }
            else if(cmd[0] == 'E')
            {
                scanf("%d", &x);
                int t = team[x];
                if(q2[t].empty()) q.push(t);
                q2[t].push(x);
            }
        }
        printf("\n");
    }
    return 0;
}

UVA 10679 - I Love Strings!!