UPCOJ 5344 被子 瞎搞

2021-08-14 22:27:27 字數 1174 閱讀 5156

作為乙隻明媚的兔子,需要學會疊被子…

被子是方形的,上面有很多小寫字母.可以認為被子是乙個n*m的字元矩陣

被子能夠被疊起來,當且僅當每一行,每一列都是回文串.

兔子可以把同一條被子上任意兩個位置的字母交換位置,而且兔子不嫌麻煩,為了把被子疊起來它願意交換任意多次.但是兔子不能交換兩條不同的被子之間的字母.

現在兔子翻箱倒櫃找出來了很多被子,請你幫兔子判斷每條被子能否被疊起來.

第一行乙個q,表示被子的條數

接下來描述q條被子.

描述每條被子時,第一行輸入兩個整數n,m表示由n行m列組成

接下來n行每行乙個長度為m的字串.字串中只含小寫字母.

q行,依次輸出對每條被子的判斷結果.如果可以疊起來,輸出一行「yes」(不包括引號),如果疊不起來,輸出一行「no」(不包括引號).

5

3 4aabb

aabb

aacc

2 2aa

bb5 1tw

eet2 5

abxba

abyba

1 1z

yes

noyes

noyes

q<=10,

n,m<=

200

發現對於兩個都是偶數的來說,因為每行每列都要對稱,那麼每個字元出現的次數都應該是4的倍數。

對於一奇一偶的情況,只有奇中間那一行可以是%4 餘 2的。因為中間那一串自己成為乙個回文串即可。當然出現奇數次數的不行。同時餘2的個數必須要《列/2(如果列為偶的話,其他反之)。

對於兩個都是奇數的情況,允許乙個奇數出現,拿乙個作為中間那乙個。其他餘2的次數不能超過n−

1+m−

12。特判即可。

#include 

#include

int cnt[30], mod[4];

char s[207];

void init(int n, int m)

for (int i = 0; i < 26; i++) mod[cnt[i] % 4]++;

}bool solve(int n, int m) else

}int main()

return

0;}

UPCOJ 5502 優先佇列

題目大意 打地鼠,每只地鼠都從0時刻冒出來,但是停留一定的時間有一定的分值,問你怎麼打分數最高 題目思路 設定乙個now記錄秒,對地鼠按照時間公升序,如果時間相同分值降序來排序,然後從第一只地鼠到最後乙隻地鼠,如果now比地鼠停留的時間久,那麼很開心進入佇列,如果不是,那麼就需要把佇列中最小的那個數...

5 3 4 變數的使用規則

因為定義乙個成員變數時,成員變數將被放置到堆記憶體中,成員變數的作用域將擴大到類存在範圍或者物件存在範圍,這種範圍的擴大有兩個害處 增大了變數的生存空間,這將導致更大的記憶體開銷。擴大了變數的作用域,這不利於提高程式的內聚性。package chap5 3 public class scopetes...

奶牛的編號 UPCOJ 3578

題目描述 有n 1 n 1000 頭奶牛,它們都被標上乙個優先等級編號 1,2或3。用來表示它們喝水時的優先次序,編號為l的最優先,編號為2的其次,編號為3的最後。每天奶牛開始時排成一行,但總是很亂,需要你把它們重新排成編號為1的奶牛在最前面,編號為2的其次,編號為3的奶牛在最後。你能計算出最少需要...