题目链接:http://codeforces.com/contest/1337
A
思路:直接输出bcc就好了,肯定可以组成三角

//------------------------------------------------- //Created by HanJinyu //Created Time :四 4/16 14:56:51 2020 //File Name :635A.cpp //------------------------------------------------- #include <stdio.h> #include <string.h> #include <iostream> #include <algorithm> #include <vector> #include <queue> #include <set> #include <map> #include <list> #include <map> #include <string> #include <math.h> #include <stdlib.h> #include <time.h> using namespace std; typedef double db; typedef long long ll; const int maxn = 200005; int main() { //freopen("in.txt","r",stdin); //freopen("out.txt","w",stdout); int t; scanf("%d",&t); while(t--) { int a,b,c,d; scanf("%d%d%d%d",&a,&b,&c,&d); printf("%d %d %d ",b,c,c); } return 0; }
B
思路:优先取x/2+10的,直到生命值上升或者用完次数为止,再用x-10的

//------------------------------------------------- //Created by HanJinyu //Created Time :四 4/16 21:25:29 2020 //File Name :635B2.cpp //------------------------------------------------- #include <stdio.h> #include <string.h> #include <iostream> #include <algorithm> #include <vector> #include <queue> #include <set> #include <map> #include <list> #include <map> #include <string> #include <math.h> #include <stdlib.h> #include <time.h> using namespace std; typedef double db; typedef long long ll; const int maxn = 200005; int main() { //freopen("in.txt","r",stdin); //freopen("out.txt","w",stdout); int T; scanf("%d",&T); while(T--) { int x; int n,m; scanf("%d%d%d",&x,&n,&m); for(int i=0;i<n;i++) { if(x/2+10<x) x=(x*0.5)+10; else break; } // cout<<x<<endl; if(x<=m*10)printf("YES "); else printf("NO "); } return 0; }
C
思路:建一棵树,以1为根,扫描每个节点,记录深度,当该节点被选中,那么子节点肯定被选中,因为其深度更大,那么子节点就要-1,那么记录每个节点的深度-子节点个数就行,排序后将前k大小的累计即可

//------------------------------------------------- //Created by HanJinyu //Created Time :五 4/17 11:10:56 2020 //File Name :vectortree.cpp //------------------------------------------------- #include <stdio.h> #include <string.h> #include <iostream> #include <algorithm> #include <vector> #include <queue> #include <set> #include <map> #include <list> #include <map> #include <string> #include <math.h> #include <stdlib.h> #include <time.h> using namespace std; typedef double db; typedef long long ll; const int maxn = 200005; vector<int>G[maxn],v; int dfs(int u,int p,int dept) { int sum=1; for(int t:G[u]) { if(t!=p) { //cout<<t<<" "; sum+=dfs(t,u,dept+1); // cout<<"sum= "<<sum<<endl; } } v.push_back(dept-sum+1); // cout<<"end= "<<v.back()<<endl; return sum; } int main(){ int T,k; scanf("%d%d",&T,&k); int u,vv; for(int i=0;i<T-1;i++) { scanf("%d%d",&u,&vv); G[u].push_back(vv); G[vv].push_back(u); } dfs(1,0,0); ll summ=0; //cout<<"v:"; //for(int i=0;i<v.size();i++) // cout<<v[i]<<" "; //cout<<endl; sort(v.rbegin(),v.rend()); for(int i=0;i<k;i++) summ+=v[i]; printf("%lld ",summ); return 0; }