1001:赶火车
问题描述
小伙伴们愉快地结束了暑假wannafly训练营的生活,决定返回学校,早上小伙伴们要赶到高铁站,高铁将在y分钟后停止检票,但他们发现了一件尴尬的事情——他们不认路。
这个城市的道路是非常诡异的,在他们面前有n+m条路,其中n条路是正确的,如果走正确的路,将会在ai分钟后走到高铁站,另外m条路是不正确的,如果走不正确的路,将会在bi分钟后回到起点。
小伙伴们只能随机选择一条路走,但他们记性很差,即使走过一条不正确的路,他们也可能会再次选择这条路。
小伙伴们是非常谨慎的人,他们想要计算到达高铁站所需时间的期望EX,如果EX≤y,那么就出发,否则就退票。
Input
第一行是一个整数T,表示有T组数据,接下来T组数据,每组数据包含三行: n,m,y a1,a2,…,an b1,b2,…,bm
含义如题中所述 1≤T≤100,1≤n,m≤10,1≤ai,bi,y≤1000
Output
对于每组数据,如果要出发,那么就输出“Go”,否则输出“Wait”,不含引号。
Sample Input
2
4 7 2
1 1 1 1
1 1 1 1 1 1 1
7 4 2
1 1 1 1 1 1 1
1 1 1 1
Sample Output
Wait
Go
思路
这题是一道几何分布概率题(好吧,我没有学过),结论的证明过程也不难,高中的知识就可以解决
我就直接放一张图好了;
结论就是(suma + sumb) / n;(字丑勿怪0.0)
代码
#include<iostream>
using namespace std;
int main() {
int t, n, m, s,a;
cin >> t;
while(t--) {
int sumx = 0, sumy = 0;
cin >> n >> m >> s;
for (int i = 0; i < n + m; i++) {
cin >> a;
if(i < n)
sumx += a;
else
sumy += a;
}
if((sumx + sumy) *1.0 / n <= s) cout << "Go" << endl;
else cout << "Wait" << endl;
}
}
1002:美丽国度
Problem Description
街道上依次坐落着n个景点,每个景点都有一个美丽度a[i]。
定义[l,r]之间景点的美丽度为(r-l+1)a[l]+(r-l)a[l+1]+…+2a[r-1]+1a[r]
现在我们想要知道对于所有的子区间,景点的美丽度和为多少。
Input
第一行输入一个整数n(1<n<=1000000), 第二行输入n个整数。 0<=ai<=1e9
Output
输出所有区间的美丽度和(由于输出结果太大,答案取模1e9+7)。
Sample Input
3
1 2 3
5
1 2 3 4 5
Sample Output
27
182
(这题样例是有问题的,少了一个。我加上去了)
这题是一道规律题,先求出每个数要使用的次数就可以,放一张图;
本子上写的有点看不清了,结论部分大家直接看代码吧
#include<iostream>
using namespace std;
const int N = 1e5+1;
typedef long long LL;
const LL Mod = 1e9 + 7;
int num[N], a[N];
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
int n;
cin >> n;
for (int i = 1; i <= n; i++)
cin >> a[i];
for (int i = 1; i <= n; i++) //每个数出现的次数
num[i] = (n - i + 1) * (n - i + 2) * i/ 2;
LL sum = 0;
for (int i = 1; i <= n; i++) {
sum = (sum + a[i] * num[i]) % Mod;
}
cout << sum << endl;
}
1003:刚刚窥屏得知是6202
1004:定理证明
Problem Description
现在我们有n个定理,并且这n个定理是等价的,也就是说从任意一个定理出发,都可以推出其他所有的定理。
例如
定理1:有上界的实数集合必有上确界
定理2:有界实数列必有收敛子列
定理3:单调有界的实数列一定收敛
一共存在定理1→定理2、定理2→定理1、定理1→定理3、定理3→定理1、定理2→定理3、定理3→定理2这六种推导关系,但很显然有些推导是冗余的,例如,如果已经证明了定理1→定理2、定理2→定理3,那么定理1→定理3是显然成立的,证明定理1→定理3就是多余的。
请问我们最多可以按顺序写出多少个推导关系,使得其中任意一个推导关系和前面的结合起来不是多余的?
Input
第一行是一个整数T,表示有T组数据,接下来T组数据,每组数据包含一个整数n表示定理的个数。 1≤T≤100,1≤n≤1000
Output
对于每组数据,输出答案除以 10^9+7 的余数。
Sample Input
3
1
2
3
Sample Output
0
2
5
Hint
证明定理1→定理2、定理2→定理3,那么定理1→定理3是冗余的
证明定理1→定理2、定理1→定理3,那么定理2→定理3不是冗余的
也是一道规律题,可以转化为往n个点里添边,保证添加这条边时任意两点间只能有一种方法到达,求最多添加多少条边。可以思考一下让一个(n - 1)个点的图增加一个点可以增加多少个点可以让它联通,由于图是有向图,让第n个点先连上这n-1个点,可是这时侯图还是没有联通,因为从第n个点只能出去,而不能从其他地方回来,又因为其他的点都已经联通了,所以你只能再增加一个点,所以可以推出想一个有n-1个点的图增加一个点最多可以添加n条边让它联通。递推公式为:
An = A(n-1) + n,A1 = 0;即An = (n + 1) * n / 2 - 1;
代码:
#include<iostream>
using namespace std;
int main() {
int t, n;
cin >> t;
while(t--) {
cin >> n;
cout << (n + 1) * n / 2 - 1 << endl;
}
}
萌新可能表达的不太清楚,有什么问题可以评论。若有错希望各位大佬指出0.0