zoukankan      html  css  js  c++  java
  • 集训前复习

    Kruskal

    #include<iostream>
    #include<algorithm>
    #include<cstring>
    #include<cstdio>
    using namespace std;
    #define re register
    int n,m,ans,fa[5001];
    struct bian{
        int from,to,v;
    }len[200010];
    inline int fd(){
        int s=1,t=0;
        char c=getchar();
        while(c<'0'||c>'9'){
            if(c=='-')
                s=-1;
            c=getchar();
        }
        while(c>='0'&&c<='9'){
            t=t*10+c-'0';
            c=getchar();
        }
        return s*t;
    }
    bool cmp(bian a,bian b){
        return a.v < b.v;
    }
    int find(int x){
        if(x == fa[x])
            return x;
        else return fa[x] = find(fa[x]);
    }
    int main()
    {
        freopen("kru.in","r",stdin);
        freopen("kru.out","w",stdout);
        n = fd(),m = fd();
        for(re int i=1;i<=n;++i)
            fa[i] = i;
        for(re int i=1;i<=m;++i)
            len[i].from = fd(),len[i].to = fd(),len[i].v = fd();
        sort(len+1,len+1+m,cmp);
        for(re int i=1;i<=m;++i){
            int fa1 = find(len[i].from),fa2 = find(len[i].to);
            if(fa1 != fa2){
                fa[fa1] = fa2;
                ans += len[i].v;
            } 
        }
        printf("%d",ans);
        return 0;
    }

     Prim

    #include<iostream>
    #include<cstring>
    #include<cstdio>
    using namespace std;
    #define re register
    #define inf 19260817
    const int maxn = 2*1e5+5;
    int n,m,now,cnt,ans,head[maxn<<1],dis[maxn],vis[maxn];
    struct bian{
        int to,next,v;
    }len[maxn<<1];
    inline int fd(){
        int s=1,t=0;
        char c=getchar();
        while(c<'0'||c>'9'){
            if(c=='-')
                s=-1;
            c=getchar();
        }
        while(c>='0'&&c<='9'){
            t=t*10+c-'0';
            c=getchar();
        }
        return s*t;
    }
    void add(int from,int to,int v){
        len[++cnt].v = v;
        len[cnt].to = to;
        len[cnt].next = head[from];
        head[from] = cnt;
    }
    int main()
    {
        n = fd(),m = fd();
        for(re int i=1;i<=m;++i){
            int from = fd(),to = fd(),v = fd();
            add(from,to,v),add(to,from,v);
        }
        for(re int i=1;i<=n;++i)
            dis[i] = inf,vis[i] = 0;
        dis[1] = 0;
        for(re int k=head[1];k;k=len[k].next){
            int to = len[k].to,v = len[k].v;
            dis[to] = min(dis[to],dis[1]+v);
        }
        now = 1;
        for(re int i=1;i<=n-1;++i){
            int minn = inf;
            vis[now] = 1;
            for(re int j=1;j<=n;++j)
                if(!vis[j]&&minn>dis[j])
                    minn = dis[j],now = j;
            //遍历n个点,保证每次选不同的点,一共选n-1次.
            ans += minn;
            for(re int j=head[now];j;j=len[j].next){
                int to = len[j].to,v = len[j].v;
                if(vis[to]) continue;
                dis[to] = min(dis[to],v);//dis可理解为加入生成树的最小代价.
            }
        }
        printf("%d",ans);
        //用kru理解,手动模拟贪心选小边再选大边的'hack',感性证明.
        return 0;
    }

    DJ:

    #include<iostream>
    #include<cstring>
    #include<cstdio>
    #include<queue>
    using namespace std;
    #define e exit(0);
    #define re register
    #define inf 2147483647
    const int maxn = 2*1e5+5;
    int n,m,s,cnt,head[maxn],dis[maxn],vis[maxn];
    struct bian{
        int to,next,v;
    }len[maxn];
    inline int fd(){
        int s=1,t=0;
        char c=getchar();
        while(c<'0'||c>'9'){
            if(c=='-')
                s=-1;
            c=getchar();
        }
        while(c>='0'&&c<='9'){
            t=t*10+c-'0';
            c=getchar();
        }
        return s*t;
    }
    void add(int from,int to,int v){
        len[++cnt].v = v;
        len[cnt].to = to;
        len[cnt].next = head[from];
        head[from] = cnt;
    }
    void dj(int s){
        for(re int i=1;i<=n;++i)
            dis[i] = inf,vis[i] = 0;
        dis[s] = 0;
        priority_queue<pair<int,int> > q;
        q.push(make_pair(0,s));
        while(q.size()){
            int now = q.top().second;
            q.pop();
            if(vis[now]) continue;
            vis[now] = 1;
            for(re int k=head[now];k;k=len[k].next){
                int to = len[k].to,v = len[k].v;
                if(dis[to] > dis[now]+v){
                    dis[to] = dis[now]+v;
                    q.push(make_pair(-dis[to],to));
                }
            }
        }
    }
    int main()
    {
        freopen("dj.in","r",stdin);
        freopen("dj.out","w",stdout);
        n = fd(),m = fd(),s = fd();
        for(re int i=1;i<=m;++i){
            int from = fd(),to = fd(),v = fd();
            add(from,to,v);
        }
        dj(s);
        for(re int i=1;i<=n;++i){
            if(i == s) dis[i] = 0;
            printf("%d ",dis[i]);
        }
        return 0;
    }

     Spfa

    #include<iostream>
    #include<cstring>
    #include<cstdio>
    #include<queue>
    using namespace std;
    #define e exit(0);
    #define re register
    #define inf 2147483647
    const int maxn = 2*1e5+5;
    int n,m,s,cnt,head[maxn],dis[maxn],vis[maxn];
    struct bian{
        int to,next,v;
    }len[maxn];
    inline int fd(){
        int s=1,t=0;
        char c=getchar();
        while(c<'0'||c>'9'){
            if(c=='-')
                s=-1;
            c=getchar();
        }
        while(c>='0'&&c<='9'){
            t=t*10+c-'0';
            c=getchar();
        }
        return s*t;
    }
    void add(int from,int to,int v){
        len[++cnt].v = v;
        len[cnt].to = to;
        len[cnt].next = head[from];
        head[from] = cnt;
    }
    void dj(int s){
        for(re int i=1;i<=n;++i)
            dis[i] = inf,vis[i] = 0;
        dis[s] = 0;
        queue<int> q;
        q.push(s);
        vis[s] = 1;
        while(q.size()){
            int now = q.front();
            q.pop();
            vis[now] = 0;
            for(re int k=head[now];k;k=len[k].next){
                int to = len[k].to,v = len[k].v;
                if(dis[to] > dis[now]+v){
                    dis[to] = dis[now]+v;
                    if(!vis[to]){
                        q.push(to);
                        vis[to] = 1;
                    }
                }
            }
        }
    }
    int main()
    {
        n = fd(),m = fd(),s = fd();
        for(re int i=1;i<=m;++i){
            int from = fd(),to = fd(),v = fd();
            add(from,to,v);
        }
        dj(s);
        for(re int i=1;i<=n;++i){
            if(i == s) dis[i] = 0;
            printf("%d ",dis[i]);
        }
        return 0;
    }

    Trie:

    #include<iostream>
    #include<cstring>
    #include<cstdio>
    using namespace std;
    #define re register
    const int maxn = 10000*51*26+5;
    char a[60];
    int n,m,cnt,root,trie[maxn][27],vis[maxn],check[maxn];
    inline int fd(){
        int s=1,t=0;
        char c=getchar();
        while(c<'0'||c>'9'){
            if(c=='-')
                s=-1;
            c=getchar();
        }
        while(c>='0'&&c<='9'){
            t=t*10+c-'0';
            c=getchar();
        }
        return s*t;
    }
    void insert(char a[]){
        int lenth = strlen(a);
        root = 0;
        for(re int i=0;i<lenth;++i){
            int x = a[i]-'a';
            if(!trie[root][x])
                trie[root][x] = ++cnt;
            root = trie[root][x];
        }
        vis[root] = 1;
    }
    int find(char a[]){
        int lenth = strlen(a);
        root = 0;
        for(re int i=0;i<lenth;++i){
            int x = a[i]-'a';
            if(!trie[root][x])
                return 1;
            root = trie[root][x];
        }
        if(!vis[root])
            return 1;
        if(check[root])
            return 2;
        check[root] = 1;
        return 3;
    }
    int main()
    {
        freopen("trie.in","r",stdin);
        freopen("trie.out","w",stdout);
        n = fd();
        for(re int i=1;i<=n;++i){
            scanf("%s",a);
            insert(a);
        }
        m = fd();
        for(re int i=1;i<=m;++i){
            scanf("%s",a);
            int flag = find(a);
            if(flag == 1)
                printf("WRONG
    ");
            if(flag == 2)
                printf("REPEAT
    ");
            if(flag == 3)
                printf("OK
    ");
        }
        return 0;
    }

     LCA( bz )

    #include<iostream>
    #include<cstring>
    #include<cstdio>
    using namespace std;
    #define re register
    const int maxn = 5*1e5+5;
    int n,m,s,cnt,head[maxn],h[maxn],fa[maxn],bz[maxn][24];
    struct bian{
        int to,next,v;
    }len[maxn<<1];
    inline int fd(){
        int s=1,t=0;
        char c=getchar();
        while(c<'0'||c>'9'){
            if(c=='-')
                s=-1;
            c=getchar();
        }
        while(c>='0'&&c<='9'){
            t=t*10+c-'0';
            c=getchar();
        }
        return s*t;
    }
    void add(int from,int to){
        len[++cnt].to = to;
        len[cnt].next = head[from];
        head[from] = cnt;
    }
    void dfs(int x){
        for(re int k=head[x];k;k=len[k].next){
            int to = len[k].to;
            if(!h[to]){
                fa[to] = x;
                h[to] = h[x]+1;
                dfs(to);
            }
        }
    }
    void makebz(){
        for(re int i=1;i<=n;++i)
            bz[i][0] = fa[i];
        for(re int j=1;j<=19;++j)
            for(re int i=1;i<=n;++i)
                bz[i][j] = bz[bz[i][j-1]][j-1];
    }
    int LCA(int x,int y){
        if(h[x] < h[y])
            swap(x,y);
        for(re int j=19;j>=0;--j)
            if(h[bz[x][j]] >= h[y])
                x = bz[x][j];
        if(x == y)
            return x;
        for(re int j=19;j>=0;--j)
            if(bz[x][j] != bz[y][j])
                x = bz[x][j],y = bz[y][j];
        return fa[x];
    }
    int main()
    {
        freopen("Lca.in","r",stdin);
        freopen("Lca.out","w",stdout);
        n = fd(),m = fd(),s = fd();
        for(re int i=1;i<=n-1;++i){
            int from = fd(),to = fd();
            add(from,to),add(to,from);
        }
        fa[s] = s,h[s] = 1;
        dfs(s);
        makebz();
        for(re int i=1;i<=m;++i){
            int from = fd(),to =fd();
            printf("%d
    ",LCA(from,to));
        }
        return 0;
    }

     Treearray:

    #include<iostream>
    #include<cstring>
    #include<cstdio>
    using namespace std;
    #define re register
    const int maxn = 5*1e5+5;
    int n,m,tree[maxn];
    inline int fd(){
        int s=1,t=0;
        char c=getchar();
        while(c<'0'||c>'9'){
            if(c=='-')
                s=-1;
            c=getchar();
        }
        while(c>='0'&&c<='9'){
            t=t*10+c-'0';
            c=getchar();
        }
        return s*t;
    }
    int lowbit(int x){
        return x&(-x);
    }
    void add(int id,int v){
        while(id<=n){
            tree[id] += v;
            id += lowbit(id);
        }
    }
    long long ask(int x){
        long long sum = 0;
        while(x){
            sum += tree[x];
            x -= lowbit(x);
        }
        return sum;
    }
    int main()
    {
        freopen("Treearray.in","r",stdin);
        freopen("Treearray.out","w",stdout);
        n = fd(),m = fd();
        for(re int i=1;i<=n;++i){
            int num = fd();
            add(i,num);
        }
        for(re int i=1;i<=m;++i){
            int flag = fd(),x = fd(),y = fd();
            if(flag == 1)
                add(x,y);
            else if(flag == 2)
                printf("%lld
    ",ask(y)-ask(x-1));
        }
        return 0;
    }

      Treearraycf:

    #include<iostream>
    #include<cstring>
    #include<cstdio>
    using namespace std;
    #define re register
    const int maxn = 5*1e5+5;
    int n,m,tree[maxn],val[maxn];
    inline int fd(){
        int s=1,t=0;
        char c=getchar();
        while(c<'0'||c>'9'){
            if(c=='-')
                s=-1;
            c=getchar();
        }
        while(c>='0'&&c<='9'){
            t=t*10+c-'0';
            c=getchar();
        }
        return s*t;
    }
    int lowbit(int x){
        return x&(-x);
    }
    void add(int x,int v){
        while(x<=n){
            tree[x] += v;
            x += lowbit(x);
        }
    }
    long long ask(int x){
        long long sum = 0;
        while(x){
            sum += tree[x];
            x -= lowbit(x);
        }
        return sum;
    }
    int main()
    {
        freopen("Treearraycf.in","r",stdin);
        freopen("Treearraycf.out","w",stdout);
        n = fd(),m = fd();
        for(re int i=1;i<=n;++i)
            val[i] = fd();
        for(re int i=1;i<=n;++i)
            add(i,val[i]-val[i-1]);
        for(re int i=1;i<=m;++i){
            int flag = fd();
            if(flag == 1){
                int x = fd(),y = fd(),v = fd();
                add(x,v),add(y+1,-v);//cf理解.
            }
            else if(flag == 2){
                int x = fd();
                printf("%lld
    ",ask(x));
            }
        }
        return 0;
    }

     RMQ:

    #include<iostream>
    #include<cstring>
    #include<cstdio>
    using namespace std;
    #define re register
    const int maxn = 1e6+10;
    int n,m,f[maxn][24],logn[maxn];
    inline int fd(){
        int s=1,t=0;
        char c=getchar();
        while(c<'0'||c>'9'){
            if(c=='-')
                s=-1;
            c=getchar();
        }
        while(c>='0'&&c<='9'){
            t=t*10+c-'0';
            c=getchar();
        }
        return s*t;
    }
    int main()
    {
        freopen("RMQ.in","r",stdin);
        freopen("RMQ.out","w",stdout);
        n = fd(),m = fd();
        logn[0] = -1;
        for(re int i=1;i<=n;++i)
            f[i][0] = fd(),logn[i] = logn[i>>1]+1;
        for(re int j=1;j<=19;++j)
            for(re int i=1;i+(1<<j)-1<=n;++i)
                f[i][j] = max(f[i][j-1],f[i+(1<<j-1)][j-1]);
        //f[i+(i<<j-1)][j-1];
        for(re int i=1;i<=m;++i){
            int L = fd(),R = fd();
            int id = logn[R-L+1];
            printf("%d
    ",max(f[L][id],f[R-(1<<id)+1][id]));
        }
        //f[R-(1<<id)+1];
        return 0;
    }

     Invfm:

    #include<iostream>
    #include<cstring>
    #include<cstdio>
    using namespace std;
    #define re register
    int n,mod;
    inline int fd(){
        int s=1,t=0;
        char c=getchar();
        while(c<'0'||c>'9'){
            if(c=='-')
                s=-1;
            c=getchar();
        }
        while(c>='0'&&c<='9'){
            t=t*10+c-'0';
            c=getchar();
        }
        return s*t;
    }
    int qsm(int x,int y){
        int base = 1;
        while(y){
            if(y&1) base = (base%mod*x%mod)%mod;
            x = (x%mod*x%mod)%mod;
            y>>=1;
        }
        return base;
    }
    int main()
    {
        freopen("Ivfm.in","r",stdin);
        freopen("Ivfm.out","w",stdout);
        n = fd(),mod = fd();
        for(re int i=1;i<=n;++i){
            int ans = qsm(i,mod-2);
            ans = (ans%mod+mod)%mod;
            printf("%d
    ",ans);
        }
        return 0;
    }

     Invexgcd:

    #include<iostream>
    #include<cstring>
    #include<cstdio>
    using namespace std;
    #define re register
    int n,x1,y1,x2,y2,mod;
    inline int fd(){
        int s=1,t=0;
        char c=getchar();
        while(c<'0'||c>'9'){
            if(c=='-')
                s=-1;
            c=getchar();
        }
        while(c>='0'&&c<='9'){
            t=t*10+c-'0';
            c=getchar();
        }
        return s*t;
    }
    void exgcd(int a,int b){
        if(!b){
            x1 = 1;
            y1 = 0;
            return;
        }
        exgcd(b,a%b);
        x2 = x1,y2 = y1;
        x1 = y2;
        y1 = x2 - (a/b)*y2;
    }
    int main()
    {
        freopen("Invexgcd.in","r",stdin);
        freopen("Invexgcd.out","w",stdout);
        n = fd(),mod = fd();
        for(re int i=1;i<=n;++i){
            exgcd(i,mod);
            printf("%d
    ",(x1%mod+mod)%mod);
        }
        return 0;
    }

     Invdt:

    #include<iostream>
    #include<cstring>
    #include<cstdio>
    using namespace std;
    #define re register
    const int maxn = 3*1e6+10;
    int n,mod,inv[maxn];
    inline int fd(){
        int s=1,t=0;
        char c=getchar();
        while(c<'0'||c>'9'){
            if(c=='-')
                s=-1;
            c=getchar();
        }
        while(c>='0'&&c<='9'){
            t=t*10+c-'0';
            c=getchar();
        }
        return s*t;
    }
    int main()
    {
        freopen("Invdt.in","r",stdin);
        freopen("Invdt.out","w",stdout);
        n = fd(),mod = fd();
        inv[1] = 1;
        for(re int i=2;i<=n;++i)
            inv[i] = ((1ll*(-inv[mod%i])*(mod/i))%mod+mod)%mod;
        for(re int i=1;i<=n;++i)
            printf("%d
    ",inv[i]);
        return 0;
    }

    Tyfc:

    #include<iostream>
    #include<cstring>
    #include<cstdio>
    using namespace std;
    #define re register
    int a,b,x1,x2,y1,y2;
    inline int fd(){
        int s=1,t=0;
        char c=getchar();
        while(c<'0'||c>'9'){
            if(c=='-')
                s=-1;
            c=getchar();
        }
        while(c>='0'&&c<='9'){
            t=t*10+c-'0';
            c=getchar();
        }
        return s*t;
    }
    void exgcd(int a,int b){
        if(!b){
            x1 = 1;
            y1 = 0;
            return;
        }
        exgcd(b,a%b);
        x2 = x1,y2 = y1;
        x1 = y2;
        y1 = x2 - a/b*y2;
    }
    int main()
    {
        freopen("Tyfc.in","r",stdin);
        freopen("Tyfc.out","w",stdout);
        a = fd(),b = fd();
        exgcd(a,b);
        x1 = (x1%b+b)%b;
        printf("%d",x1);
        return 0;
    }

     bdfc:

    #include<iostream>
    #include<cstring>
    #include<cstdio>
    using namespace std;
    #define e exit(0)
    #define re register
    int a,b,c,g,x1,y1,x2,y2,x,y;
    inline int fd(){
        int s=1,t=0;
        char c=getchar();
        while(c<'0'||c>'9'){
            if(c=='-')
                s=-1;
            c=getchar();
        }
        while(c>='0'&&c<='9'){
            t=t*10+c-'0';
            c=getchar();
        }
        return s*t;
    }
    int gcd(int x,int y){
        if(!y)
            return x;
        else return gcd(y,x%y);
    }
    void exgcd(int a,int b){
        if(!b){
            x1 = 1;
            y1 = 0;
            return;
        }
        exgcd(b,a%b);
        x2 = x1,y2 = y1;
        x1 = y2;
        y1 = x2 - a/b*y2;
    }
    int main()
    {
        freopen("bdfc.in","r",stdin);
        freopen("bdfc.out","w",stdout);
        a = fd(),b = fd(),c = fd();
        g = gcd(a,b);
        exgcd(a,b);
        x1 = x1*(c/g),y1 = y1*(c/g);
        for(re int k = 0;k<=100;++k){
            x = x1 + k*(b/g);
            y = y1 - k*(a/g);
            printf("%d %d
    ",x,y);
        }
        return 0;
    }

     CRT:

    #include<iostream>
    #include<cstring>
    #include<cstdio>
    using namespace std;
    #define e exit(0)
    #define re register
    #define LL long long
    const int maxn = 1010;
    long long n,M=1,k,x1,y1,x2,y2,ans,a[maxn],b[maxn];
    inline long long fd(){
        long long s=1,t=0;
        char c=getchar();
        while(c<'0'||c>'9'){
            if(c=='-')
                s=-1;
            c=getchar();
        }
        while(c>='0'&&c<='9'){
            t=t*10+c-'0';
            c=getchar();
        }
        return s*t;
    }
    void exgcd(LL a,LL b){
        if(!b){
            x1 = 1;
            y1 = 0;
            return;
        }
        exgcd(b,a%b);
        x2 = x1,y2 = y1;
        x1 = y2;
        y1 = x2-a/b*y2;
    }
    int main()
    {
        freopen("CRT.in","r",stdin);
        freopen("CRT.out","w",stdout);
        n = fd();
        for(re LL i=1;i<=n;++i){
            a[i] = fd(),b[i] = fd();
            M*=a[i];
        }
        for(re LL i=1;i<=n;++i){
            LL mi = M/a[i];
            exgcd(mi,a[i]);
            k = x1;
            ans += k*mi*b[i];
        }
        ans = ((ans%M)+M)%M;
        printf("%lld",ans);
        //注意最后模数为M.
        return 0;
    }

     jzqsm:

    #include<iostream>
    #include<cstring>
    #include<cstdio>
    using namespace std;
    #define e exit(0)
    #define re register
    #define LL long long
    const long long mod = 1e9+7;
    long long n,k;
    struct jz{
        long long a[101][101];
        jz(){memset(a,0,sizeof(a));}
        inline jz operator*(const jz & b)const{
            jz p;
            for(re LL k=1;k<=n;++k)
                for(re LL i=1;i<=n;++i)
                    for(re LL j=1;j<=n;++j)
                        p.a[i][j] = (p.a[i][j]%mod+(1ll*a[i][k]%mod*b.a[k][j]%mod)%mod)%mod;
            return p;
        }
    };
    inline long long fd(){
        long long s=1,t=0;
        char c=getchar();
        while(c<'0'||c>'9'){
            if(c=='-')
                s=-1;
            c=getchar();
        }
        while(c>='0'&&c<='9'){
            t=t*10+c-'0';
            c=getchar();
        }
        return s*t;
    }
    jz qsm(jz x,LL y){
        jz base;
        for(re LL i=1;i<=n;++i)
            base.a[i][i] = 1;
        while(y){
            if(y&1) base = base*x;
            x = x*x;
            y>>=1;
        }
        return base;
    }
    int main()
    {
        freopen("jzqsm.in","r",stdin);
        freopen("jzqsm.out","w",stdout);
        n = fd(),k = fd();
        jz ori;
        for(re LL i=1;i<=n;++i)
            for(re LL j=1;j<=n;++j)
                ori.a[i][j] = fd();
        jz p = qsm(ori,k);
        for(re LL i=1;i<=n;++i){
            for(re LL j=1;j<=n;++j)
                printf("%lld ",p.a[i][j]);
            printf("
    ");
        }
        return 0;
    }

     prime:

    #include<iostream>
    #include<cstring>
    #include<cstdio>
    using namespace std;
    #define re register
    const int maxn = 1e7+7;
    int n,m,cnt,prime[maxn],vis[maxn];
    inline int fd(){
        int s=1,t=0;
        char c=getchar();
        while(c<'0'||c>'9'){
            if(c=='-')
                s=-1;
            c=getchar();
        }
        while(c>='0'&&c<='9'){
            t=t*10+c-'0';
            c=getchar();
        }
        return s*t;
    }
    int main()
    {
        freopen("prime.in","r",stdin);
        freopen("prime.out","w",stdout);
        n = fd(),m = fd();
        for(re int i=2;i<=n;++i){
            if(!vis[i])
                prime[++cnt] = i;
            for(re int j=1;j<=cnt;++j){
                if(i*prime[j] > n)
                    break;
                vis[i*prime[j]] = 1;
                if(i%prime[j] == 0)
                    break;
                //保证被最小质因数筛去.
            }
        }
        vis[1] = 1;
        for(re int i=1;i<=m;++i){
            int num = fd();
            if(vis[num])
                printf("No
    ");
            else printf("Yes
    ");
        }
        return 0;
    }

     GJadd:

    #include<iostream>
    #include<cstring>
    #include<cstdio>
    using namespace std;
    #define e exit(0)
    #define re register
    const int maxn = 501;
    char ma[maxn],mb[maxn];
    int id,x,a[maxn],b[maxn],lena,lenb,c[maxn<<2];
    inline int fd(){
        int s=1,t=0;
        char c=getchar();
        while(c<'0'||c>'9'){
            if(c=='-')
                s=-1;
            c=getchar();
        }
        while(c>='0'&&c<='9'){
            t=t*10+c-'0';
            c=getchar();
        }
        return s*t;
    }
    int main()
    {
        freopen("GJadd.in","r",stdin);
        freopen("GJadd.out","w",stdout);
        scanf("%s",ma+1);
        lena = strlen(ma+1);
        scanf("%s",mb+1);
        lenb = strlen(mb+1);
        for(re int i=1;i<=lena;++i)
            a[lena-i+1] = ma[i]-'0';
        for(re int i=1;i<=lenb;++i)
            b[lenb-i+1] = mb[i]-'0';
        id = 1,x = 0;
        while(id<=lena||id<=lenb){
            c[id] = a[id]+b[id]+x;
            x = c[id]/10;
            c[id] %= 10;
            ++id;
        }
        --id;
        if(x)
            c[++id] = x;
        for(re int i=id;i>=1;--i)
            printf("%d",c[i]);
        return 0;
    }

     GJsubtraction:

    #include<iostream>
    #include<cstring>
    #include<cstdio>
    #include<cmath>
    using namespace std;
    #define e exit(0)
    #define R register
    char a[10010],b[10010];
    int x,id,lena,lenb,lens,lent,s[10010],t[10010],c[10010];
    bool check()
    {
        if(lena<lenb)
            return true;
        else if(lena>lenb)
            return false;
        else if(lena==lenb)
        {    
            for(R int i=0;i<lena;++i)
                if(a[i]<b[i])
                    return true;
            return false;
        }
    }
    void chang()
    {
        printf("-");
        char c[10010];
        for(R int i=0;i<lena;++i)
            c[i]=a[i];
        for(R int i=0;i<lenb;++i)
            a[i]=b[i];
        for(R int i=0;i<lena;++i)
            b[i]=c[i];
        swap(lena,lenb);
    }
    int main()
    {
    //    freopen("s.in","r",stdin);
    //    freopen("s.out","w",stdout);
        scanf("%s",a),scanf("%s",b);
        lena=strlen(a),lenb=strlen(b);
        if(check()) chang();
        lens=lena,lent=lenb;
        for(R int i=0;i<lens;++i)
            s[i]=a[lena-i-1]-'0';
        for(R int i=0;i<lent;++i)
            t[i]=b[lenb-i-1]-'0';
        while(id<lena||id<lenb){
            if(s[id]-t[id]-x<0){
                x=1;
                c[id]=s[id]+10-t[id]-x;
            }
            else if(s[id]-t[id]-x>=0){
                x=0;
                c[id]=s[id]-t[id]-x;
            }
            ++id;
        }
        --id;
        while(c[id]==0)
            --id;
        for(R int i=id;i>=0;--i)
            cout<<c[i];
        return 0;
    }

     

    #include<iostream>
    #include<cstring>
    #include<cstdio>
    using namespace std;
    #define e exit(0)
    #define re register
    #define LL long long
    const int maxn = 1e5+10;
    LL n,m,cnt,a[maxn];
    struct shu{
        int l,r,ls,rs,v,tag;
    }tree[maxn<<1];
    inline LL fd(){
        LL s=1,t=0;
        char c=getchar();
        while(c<'0'||c>'9'){
            if(c=='-')
                s=-1;
            c=getchar();
        }
        while(c>='0'&&c<='9'){
            t=t*10+c-'0';
            c=getchar();
        }
        return s*t;
    }
    void build(int l,int r){
        int sur = ++cnt;
        tree[sur].l = l,tree[sur].r = r;
        if(l!=r){
            tree[sur].ls = cnt+1;
            build(l,(l+r)/2);
            tree[sur].rs = cnt+1;
            build((l+r)/2+1,r);
            int lson = tree[sur].ls,rson = tree[sur].rs;
            tree[sur].v = tree[lson].v+tree[rson].v;
        }
        else tree[sur].v = a[l];
    }
    void pushdown(LL k){
        LL lson = tree[k].ls,rson = tree[k].rs,tag = tree[k].tag;
        tree[lson].v += (tree[lson].r-tree[lson].l+1)*tag;
        tree[rson].v += (tree[rson].r-tree[rson].l+1)*tag;
        tree[lson].tag += tag;
        tree[rson].tag += tag;
        tree[k].tag = 0;
        return;
    }
    void add(LL k,LL l,LL r,LL v){
        if(tree[k].l == l&&tree[k].r == r){
            tree[k].v += (tree[k].r-tree[k].l+1)*v;
            tree[k].tag += v;
            return;
        }
        if(tree[k].tag)
            pushdown(k);
        LL mid = (tree[k].l + tree[k].r)>>1;
        if(mid<l) add(tree[k].rs,l,r,v);
        else if(r<=mid) add(tree[k].ls,l,r,v);
        else add(tree[k].ls,l,mid,v),add(tree[k].rs,mid+1,r,v);
        tree[k].v = tree[tree[k].ls].v + tree[tree[k].rs].v;
    }
    LL ask(LL k,LL l,LL r){
        if(tree[k].l == l&&tree[k].r == r)
            return tree[k].v;
        if(tree[k].tag)
            pushdown(k);
        LL mid = (tree[k].l + tree[k].r)>>1;
        if(mid<l) return ask(tree[k].rs,l,r);
        else if(mid<=r) return ask(tree[k].ls,l,r);
        else return (ask(tree[k].ls,l,mid)+ask(tree[k].rs,mid+1,r));
    }
    int main()
    {
        freopen("xdtree.in","r",stdin);
        freopen("xdtree.out","w",stdout);
        n = fd(),m = fd();
        for(re LL i=1;i<=n;++i)
            a[i] = fd();
        build(1,n);
        for(re LL i=1;i<=m;++i){
            LL flag = fd();
            if(flag == 1){
                LL l = fd(),r = fd(),v = fd();
                add(1,l,r,v);
            }
            else if(flag == 2){
                LL l = fd(),r = fd();
                printf("%lld
    ",ask(1,l,r));
            }
        }
        return 0;
    }
  • 相关阅读:
    关于WP7的Loaded事件[转]
    皮皮书屋的变态验证码
    近期学习内容for mobile
    一个js问题引发的同时吐槽
    powerdesigner 概念模型转物理模型时的丢表问题
    偶的处女文近期学习计划
    web布局实现圆角,兼容所有的浏览器
    最近面试asp.net碰到的一些题
    网站推广心得
    兼容ie6的png格式图片的背景透明问题
  • 原文地址:https://www.cnblogs.com/xqysckt/p/11593791.html
Copyright © 2011-2022 走看看