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()

相关推荐
中國龍在廣州2 小时前
生成不遗忘,「超长时序」世界模型,北大EgoLCD长短时记忆加持
人工智能·深度学习·算法·自然语言处理·chatgpt
小小8程序员2 小时前
除了 gcc/g++,还有哪些常用的 C/C++ 编译器?
c语言·开发语言·c++
亓才孓2 小时前
java中的Math.Radom拓展
开发语言·python·算法
霍田煜熙2 小时前
CBMS最新源码
算法
NAGNIP2 小时前
主流的激活函数有哪些?
算法
NAGNIP2 小时前
Self-Attention 为什么要做 QKV 的线性变换?又为什么要做 Softmax?
算法
希望_睿智2 小时前
实战设计模式之中介者模式
c++·设计模式·架构
core5122 小时前
PageRank 算法:互联网的“人气投票”
算法·pagerank
小白菜又菜3 小时前
Leetcode 1523. Count Odd Numbers in an Interval Range
算法·leetcode