簡略題意:給出2k
個數v,求出(x
i,yi
,zi)
滿足xi
<1e
9 的所有本源勾股組之後,問∑
v[yi
%(2k
)]的答案是多少。
本源勾股組的構造: 找出m
,n(m
>n)
滿足x=
m2−n
2,y=
2mn,
z=m2
+n2,
(x,y
,z) 即為勾股組。若
m 和
n互質,且
m 和
n有乙個為偶數,則找到的為本源勾股組。
所以我們找到m2
+n2 的所有互質的m和
n 即可,而這點我們可以用法裡數列來構造得到,構造得到的勾股組個數有
159154994
這麼多。
所以預處理找到所有y,然後統計即可。
我本地是沒有跑出來的…然後在cf上跑了出來,耗時2640ms,比杭電快了1s左右。
#define others
#ifdef poj
#include
#include
#include
#include
#include
#include
#include
#endif // poj
#ifdef others
#include
#endif // others
//#define file
#define all(x) x.begin(), x.end()
using
namespace
std;
const
long
double eps = 1e-8;
//int dcmp(long double x) ;
typedef
long
long ll;
long
double _abs(long
double x)
namespace solver
void solve()
}}int main()
hdu1285 hdu4857 拓撲排序
一 原題內容 problem description 有n個比賽隊 1 n 500 編號依次為1,2,3,n進行比賽,比賽結束後,裁判委員會要將所有參賽隊伍從前往後依次排名,但現在裁判委員會不能直接獲得每個隊的比賽成績,只知道每場比賽的結果,即p1贏p2,用p1,p2表示,排名時p1在p2之前。現在...
樹狀陣列 hdu2689 hdu2838
題意 給定乙個正整數n,和乙個1 n的乙個排列,每個數可以和旁邊的兩個數的任意乙個交換,每交換一次總次數就要加一,問將這個排列轉換成乙個遞增的排列需要多少次交換?題意可以轉換成求這個排列的逆序對數。include include include include using namespace std...
hdu2068 hdu 2049 錯排組合
這部分涉及的知識為組合數和錯排 參考 比較簡單 hdu2068 include include int64 c int n,int m 組合數公式 return u d main sum for i 3 i 13 i f i i 1 f i 1 f i 2 while scanf d n n 另一題...