学习资料

本博客tag

我的Tag列表

CF(93) 单调栈(3) KMP循环节(1) HASH(1)
TOJ(48) codeM(3) loj(1) dfs序(1)
Wannafly Union(23) csa(3) miller_rabin(1) 网络流(1)
AtCoder(17) 姿势(3) operator(1) 网络赛(1)
日常训练(17) 容斥定理(3) pollard_rho(1) 物理?(1)
随手练(9) 科技(3) python入门中(1) 贪心(1)
网赛(7) 期望(3) SA(1) 天梯赛训练(1)
树状数组(7) 字符串匹配(2) SPFA(1) 图论(1)
他校校赛(6) 最短路(2) ST(1) 浙南(1)
hiho(6) 台州学院we are without brain 训练(2) 补题(1) 总决赛(1)
51nod(5) 位运算(2) 概率dp(1) 经验之谈(1)
浙南联合训练赛(5) 图论及其应用(2) 比赛经验(1) 矩阵快速幂(1)
线段树(5) dp(2) ZOJ Monthly(1) 神奇的bfs(1)
学习?学个屁(5) EOJ(2) 2018ZJU校赛(1) 数位dp(1)
计算几何(5) 985月赛(2) Bestcoder(1) 面积并(1)
数论(4) 2017CCPC网赛(2) CCPC(1) 模板题(1)
概率论(4) 2017icpc北京(2) Farey sequences(1) 逆序对(1)
好题推荐(4) 2018TZC训练(2) fft(1) 后缀数组(1)
玲珑杯acm(4) 多校(2) Github(1) 高斯消元(1)
组合数学(4) 博弈(2) hackerrank(1) 各种姿势(1)
百度之星(4) KMP(2)    

FFT入门

线段树入门

数位dp入门

在n+m位二进制数中填入m个1的方案数为c(n+m,m),不填1的其余n位自动填0。再减去不符合要求的C(n+m,m-1)n次入栈m次出栈的合法排列次数则可参考卡特兰数公式。C(n+m,m)-C(n+m,m-1)

闲了滚去入门Python

tls题目集

叉姐的FFT讲义

字符串算法选讲

斐波那契循环节,数学

令人叹服的数学”巧合“

正n边形面积 n*a*a/(4*tan(PI/n))

2017多校5 01代码 bitset的使用

版权属于fls  

 

无脑背包

void ZeroOnePack(int cost,int weight) {
     for (int i = v; i >= cost; i--)
         dp[i] = max(dp[i],dp[i - cost] + weight);
 }
 void CompletePack(int cost,int weight) {
     for (int i = cost; i <= v; i++)
         dp[i] = max(dp[i],dp[i - cost] + weight);
 }
 void MultiplePack(int cost,int weight,int n) {
    if (cost * n > v) {
        CompletePack(cost,weight);
    } else {
        int k = 1;
        while (k < n) {
            ZeroOnePack(cost * k,weight * k);
            n -= k;
            k *= 2;
        }
        ZeroOnePack(cost * n,weight * n);
    }
}

矩阵模板

#include
using namespace std;
typedef long long ll;
const int N=105;
int G;
struct MX
{
    ll v[N][N];
    void O()
    {
        memset(v,0,sizeof v);
    }
    void E()
    {
        memset(v,0,sizeof v);
        for(int i=0; i1;
    }
    void P()
    {
        for(int i=0; i)
            for(int j=0; j1?"%d\n":"%d ",v[i][j]);
    }
    MX operator+(const MX &b) const
    {
        MX c;
        c.O();
        for(int i=0; i)
            for(int j=0; jb.v[i][j];
        return c;
    }
    MX operator*(const MX &b)const
    {
        MX c;
        c.O();
        for(int k=0; k)
            for(int i=0; i)
                if(v[i][k])for(int j=0; jb.v[k][j];
        return c;
    }
    MX operator^(int p)const
    {
        MX y,x;
        y.E(),memcpy(x.v,v,sizeof(v));
        for(; p; x=x*x,p>>=1)if(p&1)y=y*x;
        return y;
    }
} a,ans;

 马拉车

char a[110010];
char b[230000]="$";
int p[230000];
int len;
int main(){
    while(scanf("%s",a)!=EOF){
        for(int i=0;i==0 || a[i-1]!='\0';i++){
            b[i*2+1]='#';
            b[len=(i*2+2)]=a[i];
        }
        int mx=0,id=0,res=1;
        for(int i=1;i){
            p[i]=mx>i?min(p[2*id-i],mx-i):1;
            while(b[i+p[i]]==b[i-p[i]])++p[i];
            if(i+p[i]>mx)mx=i+p[i],id=i;
            if(p[i]>res)res=p[i]-1;
        }
        printf("%d\n",res);
    }
    return 0;
}

 快速乘O(1)

inline long long multi(long long x,long long y,long long mod)
{
long long tmp=(x*y-(long long)((long double)x/mod*y+1.0e-8)*mod);
return tmp<0 ? tmp+mod : tmp;
}

 fastIO

namespace fastIO
{
#define BUF_SIZE 100000
bool IOerror=0;
inline char nc()
{
    static char buf[BUF_SIZE],*p1=buf+BUF_SIZE,*pend=buf+BUF_SIZE;
    if(p1==pend)
    {
        p1=buf,pend=buf+fread(buf,1,BUF_SIZE,stdin);
        if(pend==p1)
        {
            IOerror=1;
            return-1;
        }
    }
    return *p1++;
}
inline bool blank(charch)
{
    return ch==''||ch=='\n'||ch=='\r'||ch=='\t';
}
inline void read(int&x)
{
    charch;
    while(blank(ch=nc()));
    if(IOerror)return;
    for(x=ch-'0'; (ch=nc())>='0'&&ch<='9'; x=x*10+ch-'0');
}
#undef BUF_SIZE
};
using namespace fastIO;

 

 

具体数学中文版目录

学习资料_第1张图片

黑书上的DP例题

天梯赛经验

TOJ贪心用栈实现经典

TOJ 题目分类

NB的在线编程

必应在线翻译

曾经的个人水博

/*  二分图匹配
* 匈牙利算法邻接表形式  
* 使用前用init()进行初始化,给uN赋值
* 加边使用函数addedge(u,v) 
*/ 
const int MAXN = 50100;//点数的最大值 
const int MAXM = 500100;//边数的最大值 
struct Edge {
    int to,next; 
}edge[MAXM]; 
int head[MAXN],tot,uN; 
void init(int un) {
    uN = un;
    tot = 0;     
    memset(head,-1,sizeof(head)); 
} 
void addedge(int u,int v) {
    //cout<<"add"<
    edge[tot].to = v; 
    edge[tot].next = head[u];     
    head[u] = tot++; 
} 
int linker[MAXN]; 
bool used[MAXN]; 
bool dfs(int u) {     
    for(int i = head[u]; i != -1;i = edge[i].next){
        int v = edge[i].to;
        if(!used[v]){
            used[v] = true;
            if(linker[v] == -1 || dfs(linker[v])){
                linker[v] = u;
                return true;
            }
        }
    }
    return false;
}
int hungary(){
    int res = 0;
    memset(linker,-1,sizeof(linker));
    for(int u = 0; u < uN;u++){//点的编号0~uN-1
        memset(used,false,sizeof(used));
        if(dfs(u))
            res++;
    }
    return res;
}

 简单的班级名字对比,当然也可以用C#直接操作excel文件

#include 
using namespace std;
set<string>S;
string s;
int main()
{
    freopen("test.in", "r", stdin);
    freopen("test.out", "w", stdout);
    for(int i=0;i<49;i++)
        cin>>s,S.insert(s);
    while(cin>>s)S.erase(s);
    for(auto X:S)
        cout<endl;
    return 0;
}

 

多边形重心

#include
#include
#include
using namespace std;
 
double cross(double a[2],double b[2]){   //求向量a,b的叉积大小
    return a[0]*b[1]-a[1]*b[0];
}
 
int main(){
    int ncase;
    cin>>ncase;
    while(ncase--){
        int i,k;
        double S,tS,a[10002][2],sx,sy;
        cin>>k;
        for(i=1;i<=k;i++)
            cin>>a[i][0]>>a[i][1];
        S=0.;sx=0.;sy=0.;          //S面积,xy横纵坐标和
        for(i=1;i<=k;i++){
            tS=cross(a[i],a[i%k+1])/2.;
            S+=tS;
            sx+=tS*(a[i][0]+a[i%k+1][0])/3;
            sy+=tS*(a[i][1]+a[i%k+1][1])/3;
        }
        if(fabs(S)<1e-7)
            puts("0.000 0.000");
        else
            printf("%.3lf %.3lf\n",fabs(S),(sx+sy)/S);
    }
    system("pause");
    return 0;
}

 

转载于:https://www.cnblogs.com/BobHuang/p/7358338.html

你可能感兴趣的:(学习资料)