HNOI2004 高精度開根

2022-05-19 10:31:32 字數 1127 閱讀 1347

題目:洛谷p2293、bzoj1213。

題目大意:給你$n,k(n\leq 10^,k\leq 50)$,求$\lfloor \sqrt[k]\rfloor$。

解題思路:高精度+二分+快速冪。

我壓了九位。

這題真的卡的我喪心病狂啊!!開始無腦高精度,後來t的不知道哪去了。

首先高精度乘法中除法取模運算特別慢,要放在乘完後再處理。

還有最重要的優化:如果當前的答案的位數乘k減k+1大於n的位數,則不需要進行乘法,因為答案一定失敗。

然後儘量減少傳值,努力卡常即可。

可憐我壓九位居然只輸出八位,找了一小時錯!

c++ code:

%:pragma gcc optimize(2)

#include#includeusing namespace std;

char read[10200];

int k;

typedef unsigned long long ll;

struct biginteger

void print()

void ch(const biginteger& b)

biginteger operator +(const biginteger& b)const

if(c.v[c.size+1])++c.size;

return c;

} biginteger dec()

if(!c.v[c.size])--c.size;

return c;

} bool operator <=(const biginteger& b)const

mid.v[0]=0;

while(!mid.v[mid.size])--mid.size;

}bool power(biginteger a,int k)

return p<=::a;

}int main()

l.size=l.v[1]=1;

r=a;

while(l<=r)

ans.print();

return 0;

}

高精度 大整數開根

二分法 include include include using namespace std int n,nlen char str 22 int c 1000 int a 1000 b 1000 d 1000 int isok int len for i 0 ifor j 0 j2 len 1 ...

Hnoi2004 金屬包裹

傳送門 三維凸包模板題 只是聽了聽計算幾何的課之後心血來潮想寫的 我的做法很無腦是吧 暴力列舉三個點組成的三角形,然後列舉剩下的點,判斷其餘點是否都在這個三角形的同一側,是的話則說明這個三角形是凸包的乙個面。理論複雜度應該是 o n 4 不過看上去跑得飛快?人帥自帶小常數哈哈 這個故事告訴我們 大力...

HNOI2004寵物收養所

time limit 10 sec memory limit 162 mb submit 2796 solved 995 submit status discuss 最近,阿q開了一間寵物收養所。收養所提供兩種服務 收養被主人遺棄的寵物和讓新的主人領養這些寵物。每個領養者都希望領養到自己滿意的寵物,...