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