HZNU 2019 Summer training 6

Posted smallhester

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HZNU 2019 Summer training 6相关的知识,希望对你有一定的参考价值。

A - Infinite Sequence

 CodeForces - 622A 

题意:第一个数是1,接下来是1和2,接下来是1,2, 3,接下来是1,2,3, 4,问第n个数是什么

题解:找出第几轮在找出第几个

技术图片
#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <algorithm>
#include <vector>
#include <queue>
#include <set>
#include <map>
#define INF 0x3f3f3f3f
#define lowbit(x) (x&(-x))
using namespace std;
typedef long long ll;

const int maxn = 1e2 + 10;

int main()

    ll n;
    while(~scanf("%lld",&n)) 
        ll tmp;
        tmp = sqrt(2 * n * 1.0);
        if(tmp * (tmp + 1) > 2 * n)
            tmp--;
        if(n - (tmp * (tmp + 1)) / 2  == 0)
            printf("%lld\\n",tmp);
        else
            printf("%lld\\n",n - (tmp * (tmp + 1)) / 2);
    
View Code

 

B - Not Equal on a Segment

 CodeForces - 622C 

题意:给你一个数组,给你m个询问,每个询问一个区间, 一个数值,在区间里哪一个位置不是这个数值,输出任意一个就行

题解:找到区间里的不一样的两个数字比较一下就好了

技术图片
#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <algorithm>
#include <vector>
#include <queue>
#include <set>
#include <map>
#define INF 0x3f3f3f3f
#define lowbit(x) (x&(-x))
using namespace std;
typedef long long ll;

const int maxn = 2e5 + 10;
int a[maxn];
struct node
    int st,en;
    int ans;
b[maxn];
int flag[maxn];
int main()

    int n, q;
    scanf("%d %d", &n, &q);
    for (int i = 1; i <= n; i++)
        scanf("%d", &a[i]);
    int pos = 0;
    for (int i = 1; i <= n; i++)
    
        if(i == 1)
        
            b[pos].st = i;
            b[pos].ans = a[i];
        
        else
        
            if(a[i] != a[i-1])
            
                b[pos].en = i - 1;
                pos++;
                b[pos].st = i;
                b[pos].ans = a[i];
            
        
    
    b[pos].en = n;
    int id = 1;
    for(int i=0;i<=pos;i++)
    
        for(int j=b[i].st;j<=b[i].en;j++)
            flag[j] = id;
        id++;
    

//    for(int i=0;i<=pos;i++)
//        printf("%d %d %d\\n",b[i].st,b[i].en,b[i].ans);
//    cout<<endl;
//    for(int i=1;i<=n;i++)
//        printf("%d ",flag[i]);

    while(q--)
    
        int l,r,x;
        scanf("%d %d %d",&l,&r,&x);
        if(flag[l] == flag[r] && a[l] == x)
        
            puts("-1");
            continue;
        
        else if(flag[l] == flag[r] && a[r] != x)
        
            printf("%d\\n",l);
            continue;
        
        else
        
            int id1 = flag[l];
            id1--;
            if(b[id1].ans != x)
                printf("%d\\n",l);
            else
            
                printf("%d\\n",b[id1 + 1].st);
            
        
    

View Code

 

C - Optimal Number Permutation

 CodeForces - 622D 

题意:用1-n组长度为2n的序列,要求每个数出现2次,假设位置分别为xi、yi(xi < yi),定义di = yi-xi。让你找到一种排列使得sigma((n-i) * |di+i-n|)最小。

题解:贪心+找规律

技术图片
#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <algorithm>
#include <vector>
#include <queue>
#include <set>
#include <map>
#define INF 0x3f3f3f3f
#define lowbit(x) (x&(-x))
using namespace std;
typedef long long ll;

const int maxn = 2e6 + 10;
int a[maxn];
int main()

   int n;
   memset(a,0,sizeof a);
   scanf("%d",&n);
   int posa = 1;
   int posb = n + 1;
   for(int i=1;i<n;i++)
   
        if(i % 2 == 1)
        
            a[posa] = i;
            a[n + 1 - posa] = i;
            posa++;
        
        else
        
            a[posb] = i;
            a[3 * n - posb] = i;
            posb++;
        
   
   for(int i = 1;i <= 2 * n;i++)
   
       if(a[i] == 0)
           printf("%d ",n);
       else
           printf("%d ",a[i]);

   
View Code

 

D - Ants in Leaves

 CodeForces - 622E 
题意:给定一颗树,每个叶子节点上有一蚂蚁,除了根结点的之外的所有节点任意时刻至多只能有一个蚂蚁,每个蚂蚁每秒能移动到相邻的节点上,问所有蚂蚁移动到根结点的最短时间是多少。
题解:深度小的叶子蚂蚁先走,这样深度小的叶子蚂蚁就不用等深度大的叶子蚂蚁。然后算出每个子树走完的所需时间。d[i] = max(d[i - 1] + 1,d[i])

技术图片
#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <algorithm>
#include <vector>
#include <queue>
#include <set>
#include <map>
#define INF 0x3f3f3f3f
#define lowbit(x) (x&(-x))
using namespace std;
typedef long long ll;

const int maxn = 5e5 + 10;

int n;
vector<int>g[maxn],d;

void dfs(int u,int fa,int deep)

    if(g[u].size() == 1)
    
        d.push_back(deep);
//        printf("%d\\n",deep);
    
    for(int i=0;i<g[u].size();i++)
    
        int v = g[u][i];
        if(v == fa)
            continue;
        dfs(v,u,deep+1);
    

int main()

    while(~scanf("%d",&n))
    
        for(int i=1;i<=n;i++)
            g[i].clear();
        for(int i=1;i<n;i++)
        
            int u,v;
            scanf("%d %d",&u,&v);
            g[u].push_back(v);
            g[v].push_back(u);
        
        int ans = 0;
        for(int k = 0; k < g[1].size(); k++)
        
            d.clear();
            dfs(g[1][k],1,1);
            sort(d.begin(),d.end());
            for(int i = 1; i < d.size(); i++)
            

                d[i] = max(d[i - 1] + 1,d[i]);
                //cout<<d[i]<<endl;
            
            ans = max(ans,d.back());
        
        printf("%d\\n",ans);
    
    return 0;
View Code

 

E - The Sum of the k-th Powers

 CodeForces - 622F 

题意:求技术图片 mod (1e9 + 7)

 

 

以上是关于HZNU 2019 Summer training 6的主要内容,如果未能解决你的问题,请参考以下文章

HZNU 2019 Summer training 8

HZNU 2019 Summer training 6 -CodeForces - 622

HZNU 2019 Summer Selection contest 1

HZNU Training 23 for Zhejiang Provincial Competition 2020

HZNU Training 21 for Zhejiang Provincial Competition 2020

HZNU Training 2 for Zhejiang Provincial Competition 2020