2023河南萌新联赛第(四)场:河南大学(二)

简介: 2023河南萌新联赛第(四)场:河南大学

J:异次元抓捕


在一个时间空间都无穷大的二维的平行宇宙中(为了简化问题,用网格表示空间)


小y因为偷取宝物被发现,开始了逃亡之旅,


小y可以在以自身为中心的边长为(2∗k+1) 的正方形网格中任意移动(1≤k≤1e5)(注意不可以不移动)


每次小y移动过后,追捕者会在空间中放下一个障碍物,拦截小y,(一个障碍物会占领一个1*1的网格)(障碍物不会出现在小y脚下))


由于小y有着高超的身法,小y可以在移动过程中越过障碍物,但是不能停留在有障碍物的地方。


(如图当k=1的时候,蓝色网格为小y的可移动范围)


小y和追捕者都聪明绝顶,小y知道所有障碍物的位置,追捕者也知道小y的位置

并且两者都会选择最优的策略,

如果最后小y被障碍物围住而无法再次移动,就会被抓住。

你需要判断小y是否会被抓住

如果小y会被抓住 , 输出YES

否则,输出NO


输入描述:

第一行包含一个正数t(1≤t≤1e5)------问题询问次数

每次询问输入一个整数k

输出描述:

对于每个测试用例

如果会被抓住,输出YES

否则,输出NO


示例1:


输入:

1. 2
2. 1
3. 617

输出:

1. YES
2. NO


思路:k==1时能抓到,输出YES,否则输出NO。


void solve()
{
    int k;
    cin>>k;
    if(k==1)
    cout<<"YES"<<endl;
    else
    cout<<"NO"<<endl;
    return ;
}


K:奖励关


有一个可以无限重生的boss,开始时boss有1点生命值,当boss被击败后(血量小于等于0时),玩家可以获得1点积分,此后boss会复活并且血量翻倍(第一次复活是2,第二次是4,第三次是8,依次类推,复活之后boss满血),再次击败boss后可以再次获得1点积分。

boss不会行动,初始时玩家攻击力为1,玩家可以行动 n 个回合,对于每一个回合玩家可以选择下面三种操作的一个。

操作1:攻击 对boss攻击,boss降低的血量等于玩家的当前攻击力

操作2:攻击强化 攻击力永久 × 2

操作3:蓄力 下次攻击时,攻击力 × 8,可以叠加(两次蓄力后可以 × 64,但是攻击之后增益消失),只对第一次攻击有收益


示例:执行5次操作,分别为22311,那么第一次的攻击时攻击力是32,第二次的攻击时攻击力是4


输入描述:


第一行一个正整数 T(T≤105)  代表多组询问


接下来 T 行,每行一个正整数n(n≤1e9)代表此轮可以进行的操作数


输出描述:


T行,每行一个整数 ,输出玩家选择最优的操作方案可以获得的最大积分数


示例1


输入

1. 2
2. 1
3. 3

输出

1. 1
2. 2


备注:

当前攻击力等于 2^(i+3× j ),i表示已执行操作2的次数 ,jjj表示当前攻击与上一次攻击间隔间的操作3的次数


思路:仔细思考会发现,蓄力的收益在n较小时和强化一样,但是在n较大时强化的收益远远大于蓄力带来的,所以直接一直强化即可。


void solve()
{
    int n,a=1,b=1,sum=0;
    cin>>n;
    cout<<(n+1)/2<<endl;
    return ;
}


M:找孙子


ym 刚刚被他的儿子冷落了,他现在想要找他的孙子诉诉苦


给定一个有向无环图,请你找出对于每个节点,对于其作为爷爷节点时,存在多少对爷爷-孙子关系


爷爷-孙子关系的定义是,如果在有向无环图中存在有向边 (x, y)(x,y) 和 (y, z)(y,z), 那么称 zz 是 xx 的孙子, 有序对组 [(x, y), (y, z)] 称为一个爷爷-孙子关系


请注意: 对于相同的一对爷爷,孙子节点,可能存在不同的中间节点,使得爷爷-孙子关系数量大于一

输入描述:

第一行输入两个正整数 nn, mm, 数据保证 1<=n<=1e6,1≤m≤2×1e6


接下来 mm 行,每行两个正整数 uu, vv 表示存在一条有向边 (u, v)


数据保证不存在重边和自环

输出描述:

输出一行 nn 个数字,用空格分隔开,第 ii 个数字表示编号为 ii 的节点的孙子数量

示例1


输入

1. 5 10
2. 5 3
3. 2 3
4. 1 2
5. 4 1
6. 1 3
7. 4 2
8. 2 5
9. 4 3
10. 1 5
11. 4 5

输出

3 1 0 6 0


思路:分别用一维vector容器来遍历,二维vector容器储存孙节点个数(想着二维数组内存过不了,二维vector居然能过)


#include <bits/stdc++.h>
#define int long long
using namespace std;
signed main() {
    int n,m;
    cin>>n>>m;
    vector<vector<int>> graph(n + 1);
    vector<int> grandchildren_count(n + 1, 0);
    for (int i=0;i<m;i++) 
  {
        int u,v;
        cin>>u>>v;
        graph[u].push_back(v);
    }
    for (int i=1;i<=n;i++) {
        for (int j:graph[i]) {
            for (int k:graph[j]) {
                grandchildren_count[i]++;
            }
        }
    }
    for (int i=1;i<=n;i++) {
        cout<<grandchildren_count[i]<<" ";
    }
    return 0;
}

目录
相关文章
|
7月前
第十三届西南民族大学程序设计竞赛
第十三届西南民族大学程序设计竞赛
43 0
|
人工智能
2023河南萌新联赛第(四)场:河南大学(一)
2023河南萌新联赛第(四)场:河南大学
89 0
|
C++
山东省第一届省赛 Ivan comes again
山东省第一届省赛 Ivan comes again
62 0
|
人工智能 Dart 算法
【算法题解】2022河南萌新联赛第(四)场:郑州轻工业大学
【算法题解】2022河南萌新联赛第(四)场:郑州轻工业大学
【算法题解】2022河南萌新联赛第(四)场:郑州轻工业大学
|
机器学习/深度学习 算法
马老师为环保投1亿:在杭州打造一个纽约公园
“上一次是医院,这一次是环境保护,我相信,杭州会成为越来越幸福的城市。”马老师说。杭州在为创业者提供宜居宜业良好环境的同时,也正在得到产业发展的反哺。