链接:
来源:牛客网 直角三棱锥
时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524288K 64bit IO Format: %lld
题目描述
在三维空间中,平面 x = 0, y = 0, z = 0,以及平面 x + y + z = K 围成了一个三棱锥。 整天与整数打交道的小明希望知道这个三棱锥内、上整点的数目。 他觉得数量可能很多,所以答案需要对给定的 M 取模。
输入描述:
输入有 1 ≤ T ≤ 105
组数据。 每组数据中,输入两个整数 0 ≤ K ≤ 109
+ 7, 1 ≤ M ≤ 109
+ 7,意义如题目描述。
输出描述:
对于每组数据,输出一个整数,为三棱锥内、上整点的数目对 M 取模。
示例1
输入
40 601 6029 6029 100007
输出
14404960
求 x + y + z< = K的个数
可以用隔板法啊,先选一个,再插入一个,再插入一个,但是是直角锥,所以只有一个符合
#includeusing namespace std;int main(){ int t; cin>>t; while(t--) { int n,m; cin>>n>>m; __int128 t=1; cout<<(int)(t*(n+1)*(n+2)*(n+3)/6%m)<<"\n"; }}
链接:
来源:牛客网 可达性
时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524288K 64bit IO Format: %lld
题目描述
给出一个 0 ≤ N ≤ 10 5 点数、0 ≤ M ≤ 10 5 边数的有向图, 输出一个尽可能小的点集,使得从这些点出发能够到达任意一点,如果有多个这样的集合,输出这些集合升序排序后字典序最小的。
输入描述:
第一行为两个整数 1 ≤ n, m ≤ 105
, 接下来 M 行,每行两个整数 1 ≤ u, v ≤ 105
表示从点 u 至点 v 有一条有向边。 数据保证没有重边、自环。
输出描述:
第一行输出一个整数 z,表示作为答案的点集的大小; 第二行输出 z 个整数,升序排序,表示作为答案的点集。
示例1
输入
7 104 55 12 56 57 24 21 25 33 53 6
输出
24 7
tarjan模板题,先求强连通分量,然后缩点
#includeusing namespace std;const int N=1e5+5;vector G[N],id[N];int low[N],dfn[N],instack[N],st[N],tot,cnt,scc,p;int belong[N],in[N];void tarjan(int u){ int v; low[u]=dfn[u]=++tot;//时间戳 st[++cnt]=u;//入栈 instack[u]=1; for(int i=0;i