問題描述
小明先把硬幣擺成了乙個 n 行 m 列的矩陣。
隨後,小明對每乙個硬幣分別進行一次 q 操作。
對第x行第y列的硬幣進行 q 操作的定義:將所有第 ix 行,第 jy 列的硬幣進行翻轉。
其中i和j為任意使操作可行的正整數,行號和列號都是從1開始。
當小明對所有硬幣都進行了一次 q 操作後,他發現了乙個奇蹟——所有硬幣均為正面朝上。
小明想知道最開始有多少枚硬幣是反面朝上的。於是,他向他的好朋友小m尋求幫助。
聰明的小m告訴小明,只需要對所有硬幣再進行一次q操作,即可恢復到最開始的狀態。然而小明很懶,不願意照做。於是小明希望你給出他更好的方法。幫他計算出答案。
輸入格式
輸入資料報含一行,兩個正整數 n m,含義見題目描述。
輸出格式
輸出乙個正整數,表示最開始有多少枚硬幣是反面朝上的。
樣例輸入
2 3樣例輸出
1資料規模和約定
對於10%的資料,n、m <= 10^3;
對於20%的資料,n、m <= 10^7;
對於40%的資料,n、m <= 10^15;
對於10%的資料,n、m <= 10^1000(10的1000次方)。
這道題主要是找規律,然後需要高精度乘法的應用來開方.
//矩陣翻硬幣
//主要用到高精度開方
//對於乙個數 若他位數是偶數則他的開放數為len/2,若是奇數則為(len+2)/2
#include
#include
#include
using
namespace std;
int num1[
1005];
//儲存n,m的值
int num2[
1005];
// 對高精度大數的比較大小
intcompare
(int a,
int b)
}return0;
}//高精度乘法操作
voidcf(
int g,
int a,
int b)
}while
(t[t[0]
]==0&&t[0]
>
0) t[0]
--;for(
int i =
0;i<=t[0]
;i++
) g[i]
=t[i]
;return;}
void
sqrt
(int a)
//開方函式
elseif(
compare
(tmp,a)==0
)}if(flag)
break;}
while
(t[t[0]
]==0&&t[0]
>
0) t[0]
--;for(
int i =
0;i<=t[0]
;i++
) a[i]
= t[i];}
intmain()
歷屆試題 矩陣翻硬幣
問題描述 小明先把硬幣擺成了乙個 n 行 m 列的矩陣。隨後,小明對每乙個硬幣分別進行一次 q 操作。對第x行第y列的硬幣進行 q 操作的定義 將所有第 i x 行,第 j y 列的硬幣進行翻轉。其中i和j為任意使操作可行的正整數,行號和列號都是從1開始。當小明對所有硬幣都進行了一次 q 操作後,他...
歷屆試題 矩陣翻硬幣
問題描述 小明先把硬幣擺成了乙個 n 行 m 列的矩陣。隨後,小明對每乙個硬幣分別進行一次 q 操作。對第x行第y列的硬幣進行 q 操作的定義 將所有第 i x 行,第 j y 列的硬幣進行翻轉。其中i和j為任意使操作可行的正整數,行號和列號都是從1開始。當小明對所有硬幣都進行了一次 q 操作後,他...
歷屆試題 翻硬幣
歷屆試題 翻硬幣 時間限制 1.0s 記憶體限制 256.0mb 問題描述 小明正在玩乙個 翻硬幣 的遊戲。桌上放著排成一排的若干硬幣。我們用 表示正面,用 o 表示反面 是小寫字母,不是零 比如,可能情形是 oo oooo 如果同時翻轉左邊的兩個硬幣,則變為 oooo oooo 現在小明的問題是 ...