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 直播?



  • 相关阅读:
    2.2.16锁对象的改变
    2.2.15内置类与同步:测试2
    2.2.14内置类与同步:测试1
    2.2.13内置类与静态内置类
    libev客户端
    Linux下sqlite3编程
    ds18b20驱动及应用程序
    ds18b20采集温度并上报服务器
    linux下GPRS模块ppp拨号上网
    linux下GPRS模块的应用程序
  • 原文地址:https://www.cnblogs.com/lyt020321/p/11374090.html
Copyright © 2011-2022 走看看