HDU 3328 Flipper (stack)

来源:互联网 发布:Knn算法预测天气预报 编辑:程序博客网 时间:2024/06/05 02:45

最近着手打基础,做做STL的题目,虽然一般STL题目难度不大,但需要加快速度的准确率.............................


本题有N张牌,一开始每个位置一张(正面朝上或者朝下),有N-1个操作,每次操作从有牌的最左边或者最右边,将那堆的牌由上到下依次翻转到旁边的那堆之中,操作结束,最后只剩一堆。

在那一堆中执行Q次询问,由上到下,第几张牌初始状态的编号以及它现在是朝上还是朝下。


直接开N个stack存好所有堆的状态......模拟操作即可。


#include <iostream>#include <algorithm>#include <cmath>#include<functional>#include <cstdio>#include <cstdlib>#include <cstring>#include <string>#include <vector>#include <set>#include <queue>#include <stack>#include <climits>//形如INT_MAX一类的#define MAX 100005#define INF 0x7FFFFFFFusing namespace std;int s[111][111];int head[111];int n,q;int numl,numr,final;char sta[111];char op[111];void init() {    memset(s,0,sizeof(s));    memset(head,0,sizeof(head));    numl = 0; numr = 0;}void solve() {    for(int i=1; i<=n; i++) {        s[i][0] = i;    }    int len = strlen(op);    int right , left;    for(int i=0; i<len; i++) {        if(op[i] == 'R') {            numr ++;            left = n - numr;            right = left + 1;            while(head[right] > -1) {                s[left][++head[left]] = s[right][head[right]--];            }        } else {            numl ++;            left = numl;            right = left + 1;            while(head[left] > -1) {                s[right][++head[right]] = s[left][head[left]--];            }        }    }}bool judge(int x,int y) {    int span = abs(x - y);    if(span % 2 == 1) {        if(sta[y-1] == 'U') sta[y-1] = 'D';        else sta[y-1] = 'U';    }    if(sta[y-1] == 'U') return 1;    return 0;}int main() {    int a;    int ca = 1;    while(scanf("%d",&n) && n) {        init();        scanf("%s",sta);        scanf("%s",op);        scanf("%d",&q);        solve();        final = 1 + numl;        printf("Pile %d\n",ca++);        for(int i=0; i<q; i++) {            scanf("%d",&a);            printf("Card %d is a ",a);            if(judge(final,s[final][n - a]) == 0)printf("face down %d.\n",s[final][n - a]);            else printf("face up %d.\n",s[final][n - a]);        }    }    return 0;}


原创粉丝点击