c++题目_传桶(改编于atcoder(题目:Heavy Buckets))

题目描述

有 N个人和 N个桶。人和桶的编号均为 1,2,...,N.

初始时,第 i个人只持有桶 i,且桶 i 是空的。

之后,将执行以下操作 10^9次:

对于 i=1,2,...,N 同时进行,第 i 个人在他们持有的每个桶中加入 i 单位的水,然后将这些桶传递给第 A i个人。

注意:桶中可以容纳任意多的水。

对于 i=1,2,...,Q,回答以下询问:

在第 T i次操作之后,第i个人的桶中有多少水?

输入格式

输入从标准输入按以下格式给出:

N Q

A1 A2 ... AN

T1 B1

T2 B2

TQ BQ

输出格式

输出 Q 行。第 i 行应为第 i 个询问的答案。

输入输出样例
  • 输入#1

    复制

    复制代码
    5 6
    3 4 2 2 5
    4 3
    6 5
    1 4
    10 1
    10 2
    1000000000 1

    输出#1
    复制

    复制代码
    12
    30
    4
    1
    2046
    1
说明/提示

题目来源:改编于atcoder(题目:Heavy Buckets

完整代码加超详细解析

cpp 复制代码
#include<bits/stdc++.h>/*#include <bits/stdc++.h> 是 GNU C++ 编译器提供的‌非标准头文件‌,
它一次性包含了几乎所有 C++ 标准库头文件(如 <iostream>、<vector>、<algorithm> ...),
主要用于竞赛编程或快速原型开发以简化代码编写,但实际项目中不推荐使用。‌‌
*/
#include <iostream>//----基本框架-头文件
#include <string>//----基本框架-头文件
#include <vector>//----基本框架-头文件
#include <algorithm>//----基本框架-头文件
#include <map>//----基本框架-头文件
#include <cmath>//----基本框架-头文件
#include <fstream>//----基本框架-头文件
#include <sstream>//----基本框架-头文件
#include <unordered_map>//----基本框架-头文件
#include <unordered_set>//----基本框架-头文件
#include <set>//----基本框架-头文件
#include <array>//----基本框架-头文件
#include <list>//----基本框架-头文件
#include <forward_list>//----基本框架-头文件
#include <numeric>//----基本框架-头文件
#include <exception>//----基本框架-头文件
#include <stdexcept>//----基本框架-头文件
#include <mutex>//----基本框架-头文件
#include <shared_mutex>//----基本框架-头文件
using namespace std;/*用来引入标准命名空间 std 的指令,用于简化标准库函数及对象的调用,
通过将命名空间内成员暴露至全局作用域,避免频繁使用 std:: 前缀,但可能引发命名冲突。
*/
int n,q;//使用int 定义整型变量n和q,n用来表示有N个人和N个桶,q表示用q个询问
long long a[10000005];//再用long long 定义长整型数组a用来存A1、A2、A3、...、An
int dfs(int x,int y){//创建整形函数dfs------------------------------------------|
    if(x==1)return y;//if判断:如果x等于1,返回y                                 |
    int sum=y;//使用int 定义整型变量sum,用来表示水量                             |
    for(int i=1;i<=n;i++){//用for循环循环n次-------------------------------|    |
        if(a[i]==y){//if判断:如果Ai等于y:-------------------------|       |    |
            sum=sum+dfs(x-1,a[i]);//sum+函数dfs(x-1,a[i])的值      |      |    |
        }//对应if-------------------------------------------------|       |    |
    }//对应for------------------------------------------------------------|    |
    return sum;//返回sum-------------------------------------------------------|
}//对应函数dfs-----------------------------------------------------------------|
int main(){//----基本框架-主函数
    cin>>n>>q;//使用cin来输入变量n和q
    for(int i=1;i<=n;i++){//用for循环循环n次---|
        cin>>a[i];//使用cin来输入数组Ai        |
    }//对应for--------------------------------|
    int x,y;//使用int 定义整型变量x和y,表示Ti,Bi
    while(q--){//while循环q次-------------------------|
        cin>>x>>y;//使用cin来输入变量x和y              |
        cout<<dfs(x,y)<<endl;;//使用cout输出函数dfs    |
    }//对应while--------------------------------------|
    return 0;//----基本框架-返回值
}//----基本框架-对应int main()

#include<bits/stdc++.h>/*#include <bits/stdc++.h> 是 GNU C++ 编译器提供的‌非标准头文件‌,

它一次性包含了几乎所有 C++ 标准库头文件(如 <iostream>、<vector>、<algorithm> ...),

主要用于竞赛编程或快速原型开发以简化代码编写,但实际项目中不推荐使用。‌‌

*/

#include <iostream>//----基本框架-头文件

#include <string>//----基本框架-头文件

#include <vector>//----基本框架-头文件

#include <algorithm>//----基本框架-头文件

#include <map>//----基本框架-头文件

#include <cmath>//----基本框架-头文件

#include <fstream>//----基本框架-头文件

#include <sstream>//----基本框架-头文件

#include <unordered_map>//----基本框架-头文件

#include <unordered_set>//----基本框架-头文件

#include <set>//----基本框架-头文件

#include <array>//----基本框架-头文件

#include <list>//----基本框架-头文件

#include <forward_list>//----基本框架-头文件

#include <numeric>//----基本框架-头文件

#include <exception>//----基本框架-头文件

#include <stdexcept>//----基本框架-头文件

#include <mutex>//----基本框架-头文件

#include <shared_mutex>//----基本框架-头文件

using namespace std;/*用来引入标准命名空间 std 的指令,用于简化标准库函数及对象的调用,

通过将命名空间内成员暴露至全局作用域,避免频繁使用 std:: 前缀,但可能引发命名冲突。

*/

int n,q;//使用int 定义整型变量n和q,n用来表示有N个人和N个桶,q表示用q个询问

long long a[10000005];//再用long long 定义长整型数组a用来存A1、A2、A3、...、An

int dfs(int x,int y){//创建整形函数dfs------------------------------------------|

if(x==1)return y;//if判断:如果x等于1,返回y |

int sum=y;//使用int 定义整型变量sum,用来表示水量 |

for(int i=1;i<=n;i++){//用for循环循环n次-------------------------------| |

if(a[i]==y){//if判断:如果Ai等于y:-------------------------| | |

sum=sum+dfs(x-1,a[i]);//sum+函数dfs(x-1,a[i])的值 | | |

}//对应if-------------------------------------------------| | |

}//对应for------------------------------------------------------------| |

return sum;//返回sum-------------------------------------------------------|

}//对应函数dfs-----------------------------------------------------------------|

int main(){//----基本框架-主函数

cin>>n>>q;//使用cin来输入变量n和q

for(int i=1;i<=n;i++){//用for循环循环n次---|

cin>>a[i];//使用cin来输入数组Ai |

}//对应for--------------------------------|

int x,y;//使用int 定义整型变量x和y,表示Ti,Bi

while(q--){//while循环q次-------------------------|

cin>>x>>y;//使用cin来输入变量x和y |

cout<<dfs(x,y)<<endl;;//使用cout输出函数dfs |

}//对应while--------------------------------------|

return 0;//----基本框架-返回值

}//----基本框架-对应int main()

相关推荐
iAkuya8 小时前
(leetcode)力扣100 62N皇后问题 (普通回溯(使用set存储),位运算回溯)
算法·leetcode·职场和发展
近津薪荼8 小时前
dfs专题5——(二叉搜索树中第 K 小的元素)
c++·学习·算法·深度优先
xiaoye-duck8 小时前
吃透 C++ STL list:从基础使用到特性对比,解锁链表容器高效用法
c++·算法·stl
松☆8 小时前
CANN与大模型推理:在边缘端高效运行7B参数语言模型的实践指南
人工智能·算法·语言模型
_F_y8 小时前
C++重点知识总结
java·jvm·c++
java干货8 小时前
为什么 “File 10“ 排在 “File 2“ 前面?解决文件名排序的终极算法:自然排序
开发语言·python·算法
皮皮哎哟8 小时前
数据结构:嵌入式常用排序与查找算法精讲
数据结构·算法·排序算法·二分查找·快速排序
程序员清洒8 小时前
CANN模型剪枝:从敏感度感知到硬件稀疏加速的全链路压缩实战
算法·机器学习·剪枝
vortex58 小时前
几种 dump hash 方式对比分析
算法·哈希算法
堕2749 小时前
java数据结构当中的《排序》(一 )
java·数据结构·排序算法