大整数类、lz77、json解析、任意类型存储、工具类等。
主è¦ç¨äºå¦ä¹ C++çç¸å ³ç¥è¯ï¼ä¾å¦if elseçåæ²»é¢æµï¼å³å¼å¼ç¨åå·¦å¼å¼ç¨ï¼åæ°å ï¼åå§åå表ï¼è¿ä»£å¨ï¼å°è£ ï¼è¿ç®ç¬¦éè½½ï¼æçä¼ååæµè¯ççã代ç å¨VSä¸å¯ä»¥å¾å¥½å°è¿è¡ï¼å¨å ¶ä»çç¯å¢åä¸è½ä¿è¯ï¼å¯ä»¥å°è¯å¨math_func.h注éæ
#define TEST
ç°æè¾ä¸ºå®åç大æ´æ°ç±»ï¼æ¯æ10è¿å¶å2è¿å¶ä¸¤ç§ï¼å¯éè¿ä¸æ¬å·è®¿é®æ¯ä¸ä½ï¼å¹¶ä¸å°è£ äºvectorè¿è¡å¨ææ©å±ï¼è¶ è¿ç°æé¿åº¦èªå¨æ©å±ï¼ï¼å¯ä»¥ç´æ¥ä½¿ç¨intæè long longèµå¼ççï¼ä¹æ³ä½¿ç¨äºæ´åãKaratsubaãTOOM-COOKãFFTï¼ä½KaratsubaåTOOM-COOKåªè¿è¡äºå¦ä¹ ï¼å¹¶ä¿çä½æªä½¿ç¨ãé¤æ³ææ¶åªç¨äºæèªå·±æ³å°ç两ç§åæ²»é¤æ³åknuthé¤æ³ãå®ç°äºå¤§æ´æ°éæºæ°ï¼å¤§æ´æ°éæºè´¨æ°ï¼äºè¿å¶ååè¿å¶çå¿«é转åï¼åæ²»ï¼ã
upd 2021.8.18 : ä¿®å¤pollard-rho以åé«ç²¾åº¦åä½ç²¾åº¦æ¯è¾çé¨åbugï¼ç°å¨pollard-rhoå¯ä»¥å¾å¿«è·åºç»å¤§é¨å10^30以å çæ°ï¼æ¯æintãlong long å大æ´æ°ã
upd 2021.10.6:大æ°é¤æ³ä¼åï¼ææªä½¿ç¨çé¡¿è¿ä»£ï¼å å ¶å¸¸æ°è¿å¤§ï¼ï¼åè¿å¶åäºè¿å¶è½¬å使ç¨unordered_mapè¿è¡ä¼åï¼å¯¹ä¸è§ç»æè¿è¡äºåå¨
常ç¨è¿ç®ç¬¦ï¼+ï¼åç®/åç®ï¼ã- (åç®/åç®)ã* ã/ çï¼äºè¿å¶æ ^ ã| ã& çï¼åºæ¬è½åinté£æ ·ç¨ã
åªè½æ¾ç¤ºæé ï¼
æ£ç¡®çåå§åï¼
bint a(7);
bint a("124");
bint a(1),b(a),c(a,false);
bint a("-123");
...
é误çåå§åï¼
bint a=7;
bint a="124";
bint a="-123";
...
èµå¼åintåºæ¬ç±»ä¼¼
toint() :转å为int
toll() :转å为long long
tostr() :转æ¢ä¸ºå符串,bint2é»è®¤è½¬ä¸ºåè¿å¶ï¼tostr(2)å³è½¬ä¸ºäºè¿å¶ä¸²
length() :æ°åé¿åº¦ï¼ä¸å
æ¬ç¬¦å·
relength() :æ¹åé¿åº¦ï¼ä¸è¶³è¡¥0
[]: åè¿å¶/äºè¿å¶ä¸ç第å ä½çæ°å
at()ãsave_at() :åä½å第å ä½çæ°å(bint8个åè¿å¶ä½ä¸ºä¸ä½ï¼bint2 32个äºè¿å¶ä½ä¸ºä¸ä½)
is_prime() : å¤ææ¯å¦æ¯ç´ æ°ï¼10^100大è´éè¦0~0.5ms ,10^1000大约100ms
rand_prime(int l) : çæé¿åº¦ä¸ºlçéæºå¤§ç´ æ°ï¼ææªè¿è¡æ´å¤çç®æ³ä¼åï¼ï¼çæ10^300çç´ æ°çº¦100~2000ms
pollard_rho(bint x) : ç´ æ°å解ï¼ä½¿ç¨çpollard_rhoç®æ³
randbint(int l) : çæéæºæ°
randbint2(int l)
...
åªå®ç°äºä¸äºç®åå½æ°
log(log n)çåä¸åæ´ log2ålog10ï¼ææ³å¾å¥½ç解ã
template<typename... _Type>
class in_type;//ç¨äºå¤æ第ä¸ä¸ªåæ°æ¯å¦å¨åé¢çåæ°å表ä¸ï¼å¦æå¨value为true
//ä¾å¦ï¼
in_type<int,int,double>::value //true
in_type<int,double,float>::value //false
template<typename _Type1, typename _Type2, typename... _Res>
class out_type;//å¤ææ¯å¦ä¸å¨åé¢çåæ°å表ä¸ï¼è¥ä¸å¨åvalue为false
timereference Time();//è·åå½åæ¶é´ï¼ç²¾åº¦æ´é«
double operator-(const timereference& lhs, const timereference& rhs);//两个æ¶é´çé´éï¼åä½ä¸ºæ¯«ç§
//ä¾åï¼
auto start=Time();
...//å¾
æµå½æ°
auto end=Time();
cout<<end-start<<endl;
template<typename Fn>
double qtime(const Fn& ToBeTest)//è¿åæ åæ°å½æ°è¿è¡ä¸æ¬¡çèæ¶
template<typename Fn, typename... Args>
double qtime(const Fn& ToBeTest, Args&&...List)//è¿å带åå½æ°è¿è¡ä¸æ¬¡çèæ¶
template<typename Fn>
double qavltime(const Fn& ToBeTest, int kth)//è¿åæ åå½æ°è¿è¡k次çå¹³åèæ¶
template<typename Fn, typename... Args>
double qavltime(const Fn& ToBeTest, int kth, Args&&...List)//è¿å带åå½æ°è¿è¡k次çå¹³åèæ¶
template<typename Fn>
double qcounttime(const Fn& ToBeTest, int kth)//è¿åæ åå½æ°è¿è¡k次çæ»èæ¶
template<typename Fn, typename... Args>
double qcounttime(const Fn& ToBeTest, int kth, Args&&...List)//è¿å带åå½æ°è¿è¡k次çæ»èæ¶
//ä¾åï¼
void print(int x){
cout<<x<<endl;
}
cout<<qtime(print,3)<<endl;
cout<<qtime(
[](int&x){
cout<<x<<endl;
},3
)<<endl;
//å
¶ä½çåºæ¬åçï¼åªæ¯å¤äºä¸ä¸ªkåæ°
template<typename Ty>
bool check(Ty* arr1,Ty*arr2,int n)//æ¯è¾ån个å
ç´ æ¯å¦ç¸å
template<typename Ty,typename... Args>
bool check(const Ty&head,const Ty&nxt,Args ...toBeTest)//æ¯è¾ææåæ°æ¯å¦ç¸åï¼åç±»åï¼
template<typename Ty>
void qswap(Ty* Start, Ty* End, int* rev)
//设æ°ç»ä¸ºa,让ææça[i]=a[rev[i]]
//è¿è¡äºå
åä¼åï¼ä½¿ç¨äºèªå·±çbint2å³äºè¿å¶å¤§æ´æ°ï¼ä¹åä¹è®¸ä¼åç¬åä¸ä¸ªå¨æé¿åº¦bitset
//åªä½¿ç¨äºsizeof(int)*(n/8)çå
åï¼å¹¶ä¸é¿å
äºæ·è´ï¼ä¸»è¦ææ³æ¯è¿è¡è¥å¹²ä¸ªç¯å½¢ç§»å¨
//ä¾åï¼
int aa[3]={6,3,7};
qswap(aa, aa + 3, { 1,0,2 });
cout<<aa[0]<<endl<<aa[1]<<endl<<aa[2]<<endl;
void bucketsort(uint32_t* Start, uint32_t* End);
//unsigned int桶æåº
//设n为å
ç´ ä¸ªæ°
//n<=500æ¶ä¸ºsortã
//500<n<=32768æ¶ä¸ºæ¡¶ç个æ°ä¸º256ç桶æåºã
//32768<næ¶ä¸ºæ¡¶ç个æ°ä¸º65536ç桶æåºã
//å½æ°æ®èå´å¾å¤§æ¶ï¼å¹¶ä¸æ°æ®æ¥è¿éæºæ¶å¿«äºsort 2~4åã
std::vector<std::string> getFiles(const std::string& path);
//è·åä¸ä¸ªæ件夹ä¸çæææ件路å¾ï¼å¦æ该路å¾æ¯æ件ï¼ååªè·å该路å¾
//è¥è·¯å¾ä¸åæ³ï¼åè¿å空çvector
std::string readFiles(const std::string&filename);
void writeFiles(const std::string&filename,const std::string&str);
//ç®åå°è£
ï¼è¯»åæ件å
¨é¨å
容ï¼è¿åstring
std::string includeTree(const std::string&filename);
//æ件include æ
//æ æ³æ ¹æ®å®å¤ææ¯å¦include
èªå·±å®ç°çlz77ç®æ³
æ¥å£é常ç®åï¼å ·ä½è§ä»£ç
#define LZLEVEL 2 //2:ä½ç§¯æå°,1ï¼é度æå¿«
stringç¸å ³çå·¥å ·ç±»
class find_tool;//使ç¨æåå¤æ度O(n)çæ¹å¼è¿è¡æç´¢ï¼åæ¶å¨å¹³åæ
åµä¸ç¨æ¶è¯å¥½
find_init //ç¨äºåå§åpattern串
find // å¹é
å®æ¶å¨
ææ¯æ毫ç§çº§å®æ¶ï¼ä¸ç§å®æ¶æ¨¡å¼
设çå¾ æ¶é´ä¸ºdelta
jsonåºåååååºåå
ææ¶æ jsonValue ãjsonReader
åè 解ææ¶å°Objectåå ¥unordered_mapï¼Arrayåå ¥vectorï¼è§£æè¾æ ¢ï¼ä½æ°æ®èå´è¾å¤§æ¶æ¥è¯¢å¿«
åè å ¨é¨ä½¿ç¨é¾è¡¨åå¨ï¼è§£æè¾å¿«ï¼ä½æ°æ®èå´è¾å¤§æ¶æ¥è¯¢æ ¢
jsonValue使ç¨æ¯è¾ç®å
线ç¨æ±
æ¬æ¥æ¯èªå·±åäºä¸ä¸ªçº¿ç¨æ± çï¼ä½æ¯çå°star第ä¸çThreadPoolåæ·±æèªå·±æå¤è...
æºä»åºThreadPool/ThreadPool.h at master · progschj/ThreadPool (github.com)
åæ°ç±»
ä¿è¯ååååæ¯å§ç»äºè´¨ï¼ä¸ºæç®å½¢å¼
è¯»å ¥æ¶è¥æåæ°ç¬¦å·ï¼åéè¦ç´§æ¨åå
template<typename T>
class fraction; //T为ååååæ¯ç±»åï¼åªè½æ¯int,long long,bint
fraction<int> a(3);//3/1
fraction<int> a(3,2);//3/2
fraction<int> a(6,8);//3/4
//æ¯æååè¿ç®ï¼èµå¼ï¼å¤å¶ï¼æ¯è¾ï¼è¾å
¥ï¼è¾åº
//è¾åºæ¶è¥åæ¯ä¸º1ï¼ååªè¾åºåå
ç©éµç±»
ææªä½¿ç¨vector<vector<T>> ï¼å æ¤é¿å é¢ç¹çå¢å¤§ç©éµå¤§å°
template<typename T>
class matrix;
matrix<int> a="[1,3,2;0,4]";
matrix<int> a="1,3,2;0,4";
matrix<int> a=" 1 3 2 ; 0 4 ";
//以ä¸èµå¼çä»·ï¼ä½¿ç¨åå·ä»£è¡¨æ¢è¡ï¼åä¸è¡ä¸åæ°åè§ç¨éæ°åï¼éè´å·éå¼å³å¯
//读å
¥å符串ä¼ä»ç¬¬ä¸ä¸ªè´å·/æ°åå¼å§è¯»å
¥ç¬¬ä¸ä¸ªæ°åï¼å æ¤ä¸è½åºç°åç¬çè´å·ï¼å±äºä¸åæ³ï¼
//æ¯æå ãåãä¹æ³ï¼ææªæªä½¿ç¨ç®æ³ä¼åï¼ãé«æ¯æ¶å
ãæ±éå
//é«æ¯æ¶å
typedef fraction<int> fr;
matrix<fr>a,b;
a="[11/12,-1/4,-1/6;-1/4,3/2,-1;-1/6,-1,31/24]";
b="[6;2;-2]";
int g=Gauss(a,b);
cout<<b;
//å¾å°çæ¡ [2152/251;1280/251;880/251]
//ç©éµæ±éå
ï¼ä¸åæ³æ¶å¯è½æé®é¢
inv(const mat&)
å¯ä»¥åå¨ä»»æç±»å
åºæ¬ç±»å åå
¶ varType
bool 0
int 1
unsigned int 2
long long 3
unsigned long long 4
float 5
double 6
char 7
UndefinedType 31
å ¶ä½varTypeéè¦èªè¡æ³¨åï¼å¦åé»è®¤ä¸º31ï¼UndefinedType)
REGISTER_VARTYPE(TYPE,VALUE) (VALUE为[8,30]ä¸äºä¸ç¸å)
å¯ç¨ä»»æç±»åæé
var x(3);
var x(4.0);
var x("wjr"); //é»è®¤ç±»å为char [4]èä¸æ¯const char*
var x(string());
var x(list<int>());
...
type(); //è¿åtype_info
Type(); //è¿åvarType(constexpr), æ°ç»ç±»åå¦ T[Size] ç Type = Type(T) | (Size<<8)
value<T>(); //è¿åå¼
计ç®å ä½ç±»
å¾ icpcéå½¹åå®ç°
å¦ä¹ facebookçfbStringå®ç°ç
è½ååç²¾åæéï¼æªå®ç°COWç
äº2021.8.29è¿è¡äºå¤§å¹ éæ
ä¸vectorä¸åä¹å¤å¨äºå¨å¤´é¨ä¹é¢çäºé¨å空é´ï¼å¤´å°¾é¢çç¸å大å°ç空é´
ç»æç¨ç
splayçå°è£ ï¼å¯ä»¥éè¿æ´è°·ä¸ç平衡æ é¢ï¼ä½æä¸æ¥å£æç¨æ§ä¸é«ï¼ä»¥åä¹è®¸å¯è½ä¼è¿è¡ç®åã
平衡æ ï¼å¨ææå ¥èç¹æè åºé´ï¼èªå®ä¹åºé´ç»´æ¤ï¼åºé´ç¿»è½¬çã
upd 2021.10.6 : ä¸å¤ªå®åï¼æ¥å£ä¸å®ç¨ï¼ç»æç¨ç
ç½ä¸æ¾å°çå åæ± ç±»ã