ZOJ 3603. Draw Something Cheat

來源:互聯網
上載者:User

    地址:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3603

    題意:背景是手機遊戲,給出一些字母猜單詞。現在假設你猜不出,然後不停重新開始遊戲,遊戲就每次給你12個大寫字母,由於正確字母以外的候選字母是隨機給出的,所以兩次遊戲中發生改變的字母肯定不是答案,是可以去掉的。現在假設你實驗了 N 次,給你每次得到的 12 個候選字母。要求按照字母順序把去掉不可能的字元之後剩下的那些字元輸出。

 

    分析:一個比較簡單的題目。但是題目描述中沒有交代相同的字元是否可能出現多次,但是顯然這是可能的。因為一個單詞中可以出現重複字元,例如 see ,choose 等。所以如果你假定每個字元只有一個的話肯定 WA,所以這題有很大的 WA比例。只要你知道每個字元是可重複的,這個題目的求解就很簡單了。就好比給你一串數字,輸出其中最小的一個數位問題相似,線性時間搞定。

 

    字元候選是一個集合(由0到多個A~Z字元組成),我們假設初始集合是多個 A,多個 B,。。。多個 Z 組成,用 unsigned char flags[26] 來標記它們,flags [ i ] 表示的是字母('A' + i )的個數,把它初始化為一個明顯很大的數字,255 就夠了。然後對每一次遊戲給出的 12 個候選字母,我們取它和現有的集合的交集。最後剩下的集合就是答案。

 

zoj3603_code

#define min(a,b) ((a)<(b)? (a):(b))#include <stdio.h>#include <string.h>int main(int argc, char* argv[]){    char line[16];    unsigned char flags[26], tmp[26];    int T, N;    int i, j, k;    scanf("%ld", &T);    for(i = 0; i < T; i++)    {        memset(flags, 0xff, sizeof(flags));        scanf("%d\n", &N);        for(j = 0; j < N; j++)        {            gets(line);            memset(tmp, 0, sizeof(tmp));            for(k = 0; k < 12; k++)            {                tmp[line[k] - 'A']++;            }            for(k = 0; k < 26; k++)            {                if(flags[k] > tmp[k])                    flags[k] = tmp[k];            }        }        for(k = 0; k < 26; k++)        {            while(flags[k] > 0)            {                putchar('A' + k);                --flags[k];            }        }        printf("\n");    }    return 0;}

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.