题目描述
有 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()