題目:洛谷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開了一間寵物收養所。收養所提供兩種服務 收養被主人遺棄的寵物和讓新的主人領養這些寵物。每個領養者都希望領養到自己滿意的寵物,...