题解

视频

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