模拟题一套
【问题背景】
zhx 帮他妹子做数学题。
【输入格式】
仅一行,包含两个数 N 和 M.
【输出格式】
仅一行,包含所求的答案 mod 10^9 + 7 的值。
【样例输入】
3 3
【样例输出】
56
【数据范围与规定】
50%的数据,所有1 ≤ 𝑂,𝑁 ≤ 10。
对于100%的数据,所有1 ≤ 𝑂,𝑁 ≤ 50000。
分析
因为数据较大(n*m时间复杂度太大),不能一个一个的算。可以用N个(等差数列的和)相加。
#include<iostream> #include<cstdio> #include<cstring> #include<queue> #include<vector> using namespace std; #include<stdlib.h> #define M 1000000007 #define LL long long LL n,m,i,j; LL ans=0,qm=1; LL fast(long long a,long long b) { LL ans=1; a=a%M; while(b>0) { if(b%2) ans=(ans*a)%M; b=b/2; a=(a*a)%M; } return ans; } int main() { scanf("%lld%lld",&n,&m); ans=m; LL c,t; for( i=2;i<=n;i++) { t=i; qm=(fast(t,m)-1+M)%M; c=fast(t-1,M-2)%M; c=((t*qm)%M*c)%M; ans=(ans+c)%M; } cout<<ans; return 0; }
【问题背景】
zhx 和他的妹子出去玩。
【问题描述】
zhx 和他的妹子去一个国家旅游,共有 N 个旅游景点,N-1 条双向连接的道
路将它们联通起来,每一条道路有固定长度。一开始 zhx 位于 1 号景点。
现在希望你能够求出旅行长度最小的方案,使得每个景点至少被访问到一次。
【输入格式】
第一行两个整数 N,代表景点数目。
接下来 N-1 行,每行三个整数 s, t, w,表示有一条从 s 到 t 的双向道路,长
度为 w。s 和 t 的编号从 1 开始。
【输出格式】
一行一个整数,代表能够访问每个景点至少一次的方案的最小旅行长度。
【样例输入】
3
1 2 3
2 3 3
【样例输出】
6
【样例输入】
3
1 2 3
1 3 3
【样例输出】
9
【数据规模与约定】
对于30%的数据,1 ≤ 𝑂 ≤ 10。
P69 游
第 4 页 共 6 页
70%的数据,1 ≤ 𝑂 ≤ 10。
对于100%的数据,1 ≤ 𝑂 ≤ 50000,1 ≤ 𝑥 ≤ 1000。
#include<iostream> #include<cstdio> #include<cstring> #include<queue> #include<vector> using namespace std; #include<stdlib.h> int n,k,ans,tot4,tot7; void find(int x) { if(!x%7) tot7++; if(!x%4) tot4++; } int f[1002][1002]; int main() { scanf("%d%d",&n,&k); int x; for(int i=1;i<=n;i++) { scanf("%d",&x); find(x); } f[1][1]=f[1][0]=1; for(int i=2;i<=n;i++) { f[i][0]=1; for(int j=1;j<i;j++) f[i][j]=f[i-1][j]+f[i-1][j-1]; f[i][i]=1; } return 0; }