首页 > 技术文章 > Codeforces Round #635 (Div. 2)

branna 2020-04-20 21:15 原文

题目链接: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\n",b,c,c);
 
    }
 
     return 0;
}
View Code

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\n");
        else printf("NO\n");
    }
 
     return 0;
}
View Code

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\n",summ);
    return 0;
}
View Code

 

推荐阅读