Comet OJ - Contest #13 補題題解

A.壺中的大銀河c++

題意:輸入長爲n的字符串,B爲男孩,G爲女孩,求字符串中所含女孩子的個數app

思路:ide

#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e5+5;
char s[maxn];
int main(){
    int n,num=0;
    scanf("%d",&n);
    scanf("%s",s);
    int len = strlen(s);
    for(int i=0;i<len;i++){
        if(s[i]=='G') num++;
    }
    printf("%d\n",num); 
}
View Code

 

B.「龍頸之玉 -五色的彈丸-」spa

題意:給一張 n x m 的圖(地圖邊界爲牆),其中'o' 表明事物,'@'表明蛇頭位置. 如今給出 長度小於 1e5 的操做,表示蛇要走的下一步,操做類型有 'W' 'A' 'S' 'D' 分別表示上下左右。注意:其中蛇頭能夠碰到蛇尾,若是重複,則輸出蛇頭符號'@'code

蛇尾符號用'X' 輸出.blog

思路:(1)模擬:開一個結構題存放蛇的全部部分,包括身體,頭部.若是下一個位置有食物,則新增長頭,以後的位置更新節點座標。而後最後正着輸出 (而後就TLE了)ci

(2)上面那種方法實在太蠢,由於這裏蛇頭和蛇身能夠重疊,因此沒必要要記錄全部信息。首先是移動,在移動過程當中每遇到一個'o'則蛇身的長度加一,最後走完能獲得蛇的長度,在移動過程當中判斷蛇頭是否超出邊界,若是則GG。最後,按照蛇身的長度字符串

對操做取逆向移動,而後輸出身體‘X’.get

#include <bits/stdc++.h>
using namespace std;
const int maxn = 450;
string mapp[maxn];
int n,m;
int headx,heady;
int dis[4][2] = {-1,0,0,-1,1,0,0,1};
int mov(char op){
    if(op=='W') return 0;
    if(op=='A') return 1;
    if(op=='S') return 2;
    if(op=='D') return 3;
}
int bac(char op){
    if(op=='W') return 2;
    if(op=='A') return 3;
    if(op=='S') return 0;
    if(op=='D') return 1;

}
int main(){
    cin>>n>>m;
    for(int i=0;i<n;i++){
        cin>>mapp[i];
    }
    int len = 0;//蛇身的長度
    for(int i=0;i<n;i++){
        for(int j=0;j<m;j++){
            if(mapp[i][j]=='@') headx = i,heady = j,mapp[i][j]='.';
        }
    }
    string op;
    cin>>op;
    int flag = 0;
    for(int i=0;i<(int)op.size();i++){
        headx += dis[mov(op[i])][0];
        heady += dis[mov(op[i])][1];
        if(headx<0||headx>=n||heady<0||heady>=m) {flag = 1; break;}
        if(mapp[headx][heady]=='o') len++,mapp[headx][heady]= '.';
    }
    if(flag) puts("GG");
    else{
        int finx = headx,finy = heady;//用於最後有重複頭尾部分的覆蓋
        mapp[finx][finy] = '@';
        for(int i=(int)op.size()-1;i>=0;i--){
            headx += dis[bac(op[i])][0];
            heady += dis[bac(op[i])][1];
            if(len<=0) { continue; }
            if(mapp[headx][heady]!='@') mapp[headx][heady] = 'X';
            len--;
        }
        for(int i=0;i<n;i++){
            cout<<mapp[i]<<endl;
        }
    }
}
View Code
相關文章
相關標籤/搜索