hihoCoder 1538 大禮堂地毯 模擬

2021-09-02 00:04:08 字數 3010 閱讀 2851

時間限制:10000ms

單點時限:1000ms

記憶體限制:256mb

小hi的學校大禮堂的地毯是由很多塊n × m大小的基本地毯拼接而成的。例如由2×3的基本地毯

abc

abd

拼接而成的大禮堂整片地毯如下:

...       

abcabcabcabcab

abdabdabdabdab

. abcabcabcabcab .

. abdabdabdabdab .

. abcabcabcabcab .

abdabdabdabdab

abcabcabcabcab

...

由於大禮堂面積非常大,可以認為整片地毯是由基本地毯無限延伸拼接的。  

現在給出k張地毯的**,請你判斷哪些**可能是小hi學校大禮堂地毯的一部分。不需要考慮旋轉**的方向。

例如

bca

bdabca

可能是上述地毯的一部分,但

bac

bad

不可能是上述地毯的一部分。

第1行包含三個整數,n,m 和 k。  

第2~n+1行包含乙個n × m的矩陣,代表基本地毯的樣式。其中每乙個元素都是乙個大寫字母(a-z)。  

之後是 k 張**的資料。  

每張**的第一行包含兩個整數,h 和 w,代表**的大小。  

以下 h 行包含乙個 h × w的矩陣,代表**中地毯的樣式。其中每乙個元素都是乙個大寫字母(a-z)。

對於80%的資料,1 ≤ n, m ≤ 10, 1 ≤ h, w ≤ 100  

對於100%的資料, 1 ≤ n, m ≤ 50, 1 ≤ k ≤ 10, 1 ≤ h ≤ 100, 1 ≤ w ≤ 800。

對於每張**,輸出yes或者no代表它是否可能是大禮堂地毯的一部分。

樣例輸入

2 3 3  

abc

abd

3 3

bca

bda

bca

2 3

bac

bad

7 14

abcabcabcabcab

abdabdabdabdab

abcabcabcabcab

abdabdabdabdab

abcabcabcabcab

abdabdabdabdab

abcabcabcabcab

樣例輸出

yes

noyes

wa了很久,很容易錯的模擬題。關鍵是要根據大禮堂地毯寬度來擴大調整模板寬度(strcat函式/string拼接),以及逐行地去比較大禮堂地毯是否基礎模板匹配(strstr函式/find與string::npos)

1. c++string拼接find & string::npos實現:------->可以3ms實現

#include #include #include#include#include#include#includeusing namespace std;

int n, m, q, h, w;

string str[55];

string s1[105], s2[105];

bool is_right()

int k = 0;

for(; k < n; k++)

}if(k == n) return false;

for(int i = 0; i < h; i++)

return true;

}int main()

}return 0;

}

2.strcpy,strstr函式實現: ------>9ms

c裡面的幾個字串函式:

char *strcpy(char* dest, const char *src):把從src位址開始且含有null結束符的字串複製到以dest開始的位址空間

strstr(str1,str2): 判斷字串str2是否是str1的子串。如果是,則該函式返回str2在str1中首次出現的位址;否則,返回null。

extern char *strcat(char *dest, const char *src):把src所指向的字串(包括「\0」)複製到dest所指向的字串後面(刪除*dest原來末尾的「\0」)。要保證*dest足夠長,以容納被複製進來的*src。*src中原有的字元不變。返回指向dest的指標。

#include #include #include #include #include #include #include #include #include #include #include #include using namespace std;

typedef long long ll;

static const int max_n = 15;

char maps[55][55];

char tar_maps[105][805];

char use_maps[105][905];

int n, m, k;

bool judge(int tar_row, int tar_col)

int i = 0;

for (; i < n; ++i)

} if (i == n) return false;

++i;

if (i == n) i = 0;

for (int j = 1; j < tar_row; ++j)

return true;

}int main()

return 0;

}

1538 清點人數

nk 中學組織同學們去五雲山寨參加社會實踐活動,按慣例要乘坐火車去。由於 nk 中學的學生很多,在火車開之前必須清點好人數。初始時,火車上沒有學生。當同學們開始上火車時,年級主任從第一節車廂出發走到最後一節車廂,每節車廂隨時都有可能有同學上下。年級主任走到第 m 節車廂時,他想知道前 m 節車廂上一...

經典海盜分金問題(hdu 1538)

別人部落格講的非常詳細 題意 這是乙個經典問題,有n個海盜,分m塊金子,其中他們會按一定的順序提出自己的分配方案,如果大於等於50 的人贊成,則方案通過,開始分金子,如果不通過,則把提出方案的扔到海浬,下乙個人繼續。思路 上面那篇部落格已經講的非常詳細了 include include includ...

Hihocoder 數列問題

給定乙個長度為n數列a a1,a2,an a 1,a 2,a n a1 a2 an 由於某種原因,小ho對這個數列有些不滿意。他希望每個在數列 現的數值,其出現的次數都是唯一的。假設a 1,1,2,2 1和2都出現了2次,小ho就會不滿意。於是小ho決定從a中刪除一些數,使得每個數值出現次數都是唯一...