作為乙隻明媚的兔子,需要學會疊被子…
被子是方形的,上面有很多小寫字母.可以認為被子是乙個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的奶牛在最後。你能計算出最少需要...