prev-34 矩陣翻硬幣
思路:1.由題意可知,將所有硬幣都進行一次q操作後,被翻轉奇數次的硬幣是反面朝上的;
2.定義f(x
)f(x)
f(x)
為正整數x
xx的約數個數,那麼座標為(a,
b)
(a,b)
(a,b
)的硬幣會被翻轉f(a
)∗f(
b)
f(a)*f(b)
f(a)∗f
(b)次,我們知道只有奇數乘以奇數結果才會是奇數,因此當且僅當f(a
)f(a)
f(a)
與f (b
)f(b)
f(b)
都為奇數時(a,
b)
(a,b)
(a,b
)才會是反面朝上;
3.如果乙個數x
xx的約數個數為奇數個,除去1
11和自身,那麼必定還剩下奇數個約數;我們設a
aa為x
xx的乙個約數,那麼x/a
x/ax/
a必定也是x
xx的乙個約數,因此想要擁有奇數個約數那麼必定存在a
aa,使得a=x
/a
a=x/a
a=x/
a,換言之x
xx是乙個完全平方數;
4.我們不難發現n
nn以內的完全平方數個數即為[n]
[\sqrt]
[n]
(其中[]
為向下取整符號);
5.通過簡單排列組合的知識我們可以得到最後的答案即為[n]
∗[m]
[\sqrt]*[\sqrt]
[n]∗[
m];
6.剩下的我們只需要模擬大數乘法、大數開方即可;
**:
#include
using
namespace std;
string mul
(string & a, string & b)
for(
int i =
0; i < s.
length()
; i++)if
(s[i]
!='0'
)return s.
substr
(i);
return
"0";
}inline
bool
cmp(string & a, string b)
string sqrt
(string & s)
return r;
}int
main()
藍橋杯 PREV 34 矩陣翻硬幣
題目 矩陣翻硬幣 鏈結 問題描述 小明先把硬幣擺成了乙個 n 行 m 列的矩陣。隨後,小明對每乙個硬幣分別進行一次 q 操作。對第x行第y列的硬幣進行 q 操作的定義 將所有第 i x 行,第 j y 列的硬幣進行翻轉。其中i和j為任意使操作可行的正整數,行號和列號都是從1開始。當小明對所有硬幣都進...
PREV 34 矩陣翻硬幣
歷屆試題 矩陣翻硬幣 時間限制 1.0s 記憶體限制 256.0mb 問題描述 小明先把硬幣擺成了乙個 n 行 m 列的矩陣。隨後,小明對每乙個硬幣分別進行一次 q 操作。對第x行第y列的硬幣進行 q 操作的定義 將所有第 i x 行,第 j y 列的硬幣進行翻轉。其中i和j為任意使操作可行的正整數...
藍橋杯 矩陣翻硬幣
問題描述 小明先把硬幣擺成了乙個 n 行 m 列的矩陣。隨後,小明對每乙個硬幣分別進行一次 q 操作。對第x行第y列的硬幣進行 q 操作的定義 將所有第 i x 行,第 j y 列的硬幣進行翻轉。其中i和j為任意使操作可行的正整數,行號和列號都是從1開始。當小明對所有硬幣都進行了一次 q 操作後,他...