zoukankan      html  css  js  c++  java
  • Atcoder abc 138

    题解

    视频

    (color{red}A)



    题意?

    输入一个数,如果这个数大于3200,那么就输出后面的字符串,否则输出red

    代码

    #include <iostream>
    #include <stdio.h>
    #include <string.h>
    #include <algorithm>
     
    using namespace std ;
     
    int a ;
    string s ;
     
    int main () {
    	cin >> a >> s ;
    	if(a >= 3200) {
    		cout << s << endl ;
    	}else {
    		puts("red") ;
    	}
    	return 0 ; 
    }
    

    (color{blue}B)



    题意

    就是让你把读到的数取到数加起来,然后把这个和取到数输出

    代码

    #include <iostream>
    #include <stdio.h>
    #include <string.h>
    #include <algorithm>
    #define maxn 120
    using namespace std ;
     
    int a[maxn] , n ;
    double s ;
     
    int main () {
    	cin >> n ;
    	for(int i = 1 ; i <= n ; i ++) {
    		double x ;
    		cin >> x ;
    		x = 1/x ;
    		s += x ;
    	}
    	cout << 1/s <<endl ;
    }
    

    (color{green}C)




    题意

    从小到大排个序,然后每次把前两小按照z=(x+y)/2的公式变成一个数,输出最后的唯一数

    代码

    #include <iostream>
    #include <stdio.h>
    #include <string.h>
    #include <algorithm>
    #include <queue>
    #define maxn 120
    using namespace std ;
    priority_queue<double,vector<double>,greater<double> >q ;
    double a[maxn] ,  ans ;
    int n ;
     
    int main () {
    	cin >> n ;
    	for(int i = 1 ; i <= n ; i ++) {
    		cin >> a[i] ;
    		q.push(a[i]) ;
    	}
    	for(int i = 1 ; i < n ; i ++) {
    		double x = q.top() ;
    		q.pop() ;
    		double y = q.top() ;
    		q.pop() ;
    		double c = (x+y)/2 ;
    		q.push(c) ;
    	}
    	cout << q.top() <<endl ;
    }
    

    (color{blue}D)




    题意 :

    一棵树,根节点为1号节点,有n各节点,m个操作,每次操作把i的子树增加x,最后问每个节点的大小

    代码

    #include<cstdio>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    #define LL long long
    #define ls k<<1
    #define rs k<<1|1
    using namespace std;
    const int N=200005;
    struct node
    {
        int u,v,nxt;
    }edge[2*N];
    struct Tree
    {
        int l,r,w,siz,f;
    }T[2*N];
    int n,m,cnt=0,num=1,root=1,a[N],b[N],head[N];
    int deep[N],fa[N],son[N],tot[N],top[N],idx[N];
    void AddEdge(int x,int y)
    {
        edge[num].u=x;
        edge[num].v=y;
        edge[num].nxt=head[x];
        head[x]=num++;
    }
    int dfs1(int now,int f,int dep)
    {
        deep[now]=dep;
        fa[now]=f;
        tot[now]=1;
        int maxson=-1;
        for(int i=head[now];i!=-1;i=edge[i].nxt)
        {
            if(edge[i].v==f) continue;
            tot[now]+=dfs1(edge[i].v,now,dep+1);
            if(tot[edge[i].v]>maxson) maxson=tot[edge[i].v],son[now]=edge[i].v;
        }
        return tot[now];
    }
    void update(int k)
    {
        T[k].w=T[ls].w+T[rs].w;
    }
    void Build(int k,int ll,int rr)
    {
        T[k].l=ll;T[k].r=rr;T[k].siz=rr-ll+1;
        if(ll==rr)
        {
            T[k].w=a[ll];
            return;
        }
        int mid=(ll+rr)>>1;
        Build(ls,ll,mid);
        Build(rs,mid+1,rr);
        update(k);
    }
    void dfs2(int now,int topf)
    {
        idx[now]=++cnt;
        a[cnt]=b[now];
        top[now]=topf;
        if(!son[now]) return;
        dfs2(son[now],topf);
        for(int i=head[now];i!=-1;i=edge[i].nxt)
          if(!idx[edge[i].v]) dfs2(edge[i].v,edge[i].v);
    }
    void pushdown(int k)
    {
        if(!T[k].f) return ;
        T[ls].w=T[ls].w+T[ls].siz*T[k].f;
        T[rs].w=T[rs].w+T[rs].siz*T[k].f;
        T[ls].f=T[ls].f+T[k].f;
        T[rs].f=T[rs].f+T[k].f;
        T[k].f=0;
    }
    void IntervalAdd(int k,int ll,int rr,int val)
    {
        if(ll<=T[k].l&&T[k].r<=rr)
        {
            T[k].w+=T[k].siz*val;
            T[k].f+=val;
            return;
        }
        pushdown(k);
        int mid=(T[k].l+T[k].r)>>1;
        if(ll<=mid) IntervalAdd(ls,ll,rr,val);
        if(rr>mid) IntervalAdd(rs,ll,rr,val);
        update(k);
    }
    int IntervalSum(int k,int ll,int rr)
    {
        int ans=0;
        if(ll<=T[k].l&&T[k].r<=rr)
            return T[k].w;
        pushdown(k);
        int mid=(T[k].l+T[k].r)>>1;
        if(ll<=mid) ans=ans+IntervalSum(ls,ll,rr);
        if(rr>mid)  ans=ans+IntervalSum(rs,ll,rr);
        return ans;
    }
    void TreeSum(int x,int y)
    {
        int ans=0;
        while(top[x]!=top[y])
        {
            if(deep[top[x]]<deep[top[y]]) swap(x,y);
            ans=ans+IntervalSum(1,idx[top[x]],idx[x]);
            x=fa[top[x]];
        }
        if(deep[x]>deep[y]) swap(x,y);
        ans=ans+IntervalSum(1,idx[x],idx[y]);
        cout<<ans<<" ";
    }
    int main()
    {
        cin>>n>>m;
        memset(head,-1,sizeof(head));
        for(int i=1;i<=n-1;i++)
        {
        	int x,y;
        	cin>>x>>y;
            AddEdge(x,y);
    		AddEdge(y,x);
        }
        dfs1(root,0,1);
        dfs2(root,root);
        Build(1,1,n);
        while(m--)
        {
        	int x,y;
        	cin>>x>>y;
            IntervalAdd(1,idx[x],idx[x]+tot[x]-1,y);
        }
        for(int i=1;i<=n;i++) TreeSum(i,i);
        cout<<endl;
        return 0;
    }
    

    (color{yellow}E)



    思路

    暴力

    非AC代码

    #include <bits/stdc++.h>
     
    using namespace std ;
    string s , t ;
    char vis[30] ;
    int main () {
    	cin >> s >> t ;
    	for(int i = 0 ; i < s.size() ; i ++) {
    		int c = s[i] - 'a' + 1 ;
    		vis[c] ++ ; 
    	}
    	for(int i = 0 ; i < t.size() ; i ++) {
    		int c = t[i] - 'a' + 1 ;
    		if(!vis[c]) {
    			puts("-1") ;
    			return 0 ;
    		}
    	}
    	int _t = 0 ,_s = 0 ,tot = 0 ;
    	int n = s.size() ;
    	while(_t != t.size()  ) {
    		_s = _s%n ;
    		tot ++ ;
    	//	cout <<tot<< ":" << _s << " " << s[_s] << "*" << _t << " " << t[_t] <<endl ; 
    		if(s[_s] == t[_t]) {
    			_t ++ ;
    			_s ++ ;
    		}else {
    			_s ++ ;
    		}
    	}
    	cout << tot << endl ;
    	return 0 ;
    }
    

    附赠图片

    youtube 直播?



  • 相关阅读:
    FZU 2112 并查集、欧拉通路
    HDU 5686 斐波那契数列、Java求大数
    Codeforces 675C Money Transfers 思维题
    HDU 5687 字典树插入查找删除
    HDU 1532 最大流模板题
    HDU 5384 字典树、AC自动机
    山科第三届校赛总结
    HDU 2222 AC自动机模板题
    HDU 3911 线段树区间合并、异或取反操作
    CodeForces 615B Longtail Hedgehog
  • 原文地址:https://www.cnblogs.com/lyt020321/p/11374090.html
Copyright © 2011-2022 走看看