A I Scream

int main()
{
IOS;
int a, b;
cin >> a >> b;
if(a + b >= 15 && b >= 8) puts("1");
else if(a + b >= 10 && b >= 3) puts("2");
else if(a + b >= 3) puts("3");
else puts("4");
return 0;
}

B

int n;
int a[N], b[N]; int main()
{
scanf("%d", &n);
int res = INF;
for(int i = 1; i <= n; ++ i)
{
scanf("%d%d", &a[i], &b[i]);
res = min(res, a[i] + b[i]);
}
for(int i = 1; i <= n; ++ i)
for(int j = 1; j <= n; ++ j)
if(i != j) res = min(max(a[i], b[j]), res);
printf("%d\n", res);
return 0;
}

C Squared Error

\(\sum\limits_{i=2}^N\sum\limits_{j=1}^{i-1}(A_i-A_j)^2\) = \(\sum\limits_{i=1}^NA_i^2 * (N - 1) - \sum\limits_{i=2}^NA_i\sum\limits_{j=1}^{i - 1}2 * A_j\)

用前缀和优化后复杂度 \(O(n)\)

int n;
int a[N], sum[N]; int main()
{
scanf("%d", &n);
LL res = 0;
for(int i = 1; i <= n; ++ i)
{
scanf("%d", &a[i]);
res += (LL)a[i] * a[i] * (n - 1);
res -= (LL)sum[i - 1] * a[i] * 2;
sum[i] = sum[i - 1] + a[i];
}
printf("%lld\n", res);
return 0;
}

D Journey

令当前已经访问过的顶点集合为 \(S\), 下一次能使得 \(|S|\) 增加 \(1\) 的概率为 \(\dfrac{N - |S|}{N}\), 首中即停止,符合几何分布,已知几何分布的期望是 \(\dfrac{1}{p}\), 故期望是 \(\sum\limits_{i = 1}^{n - 1}\dfrac{N}{N - i}\)

int n;

int main()
{
cin >> n;
double res = 0;
for(int i = 1; i < n; ++ i) res += (double)n / i; printf("%.10lf\n", res);
return 0;
}

E Mex Min Editorial

对于相同的两个数 \(x\),如果它们之间的距离大于 \(M\),则代表有一段长度为 \(M\) 的区间中没有 \(x\), \(x\)则可以作为答案

为了处理边界情况,在 \(0\) 和 \(n + 1\) 的位置上放置每一个数

int n, m;
int last[N]; int main()
{
scanf("%d%d", &n, &m);
int res = INF; for(int i = 1; i <= n; ++ i)
{
int x;
scanf("%d", &x);
if(i - last[x] > m) res = min(x, res);
last[x] = i;
}
for(int i = 0; i <= n; ++ i)
if(n + 1 - last[i] > m)
res = min(i, res);
printf("%d\n", res);
return 0;
}

F Digits Paradise in Hexadecimal

令 \(f[i][j]\) 为前 \(i\) 位选了 \(j\) 种的方案数,且选出的方案都严格小于上界

当上一位未达到上界时:

\(f[i + 1][j] += f[i][j] * j\)

\(f[i + 1][j + 1] += f[i][j] * (16 - j)\)

因为要处理前导零,所以从 \(0\) 转移要特殊处理:

\(f[i + 1][1] += f[i][0] * 15\)

\(f[i + 1][0] += f[i][0]\)

再统计上一位达到上界时,当前位取 \(0\) ~ \(v[i] - 1\) 的贡献

最后特判掉所有位都取到上界是否符合题意

#include <bits/stdc++.h>
using namespace std;
typedef long long LL; #define IOS ios::sync_with_stdio(false); cin.tie(0);cout.tie(0) const int P = 1e9 + 7;
const double PI = acos(-1.0);
const int INF = 0x3f3f3f3f;
const int N = 3e6 + 10; int main()
{
IOS;
int n;
string str;
vector<int> v;
cin >> str >> n; for(auto x : str)
if(x >= '0' && x <= '9') v.push_back((int)(x - '0'));
else v.push_back((int)(10 + x - 'A')); vector<vector<int> > f(str.size() + 1, vector<int>(18, 0)); int state = 0;
for(int i = 0; i < (int)str.size(); ++ i)
{
for(int j = 1; j <= 16; ++ j)
{
f[i + 1][j] = (f[i + 1][j] + (LL)f[i][j] * j % P) % P;
f[i + 1][j + 1] = (f[i + 1][j + 1] + (LL)f[i][j] * (16 - j) % P) % P;
}
f[i + 1][1] = (f[i + 1][1] + (LL)f[i][0] * 15 % P) % P;
f[i + 1][0] = (f[i + 1][0] + f[i][0]) % P;
for(int j = 0; j < v[i]; ++ j)
{
int nstate = state;
if(i || j) nstate |= (1 << j);
f[i + 1][__builtin_popcount(nstate)] += 1;
}
state |= (1 << v[i]);
} int res = f[str.size()][n] + (__builtin_popcount(state) == n);
cout << res << endl; return 0;
}

最新文章

  1. iOS多线程-GCD之常用函数
  2. 【转】mysql_fetch_row , mysql_fetch_array , mysql_fetch_assoc 的区别
  3. Win10重复按键盘经常按不出?Win10关闭筛选键步骤
  4. Maven依赖版本冲突的分析及解决小结
  5. JVM内存管理------GC算法精解(复制算法与标记/整理算法)
  6. FTP 传输中的主动模式和被动模式
  7. C语言培训第一天
  8. noip知识点总结之--贪心
  9. AES - Rijndael 算法(二)
  10. premake 在64位Ubuntu系统下编译32位GCC程序
  11. wpf CollectionViewSource与ListBox的折叠、分组显示,及输入关键字 Filter的筛选
  12. window下安装mysqldb模块(虚拟环境)
  13. js-使用JavaScript、jQuery两种方式实现全选/全不选
  14. adb命令介绍与使用
  15. CentOS7 使用systemctl来管理服务
  16. Swagger2常用注解及其说明 (转)
  17. shell符号解释
  18. Spring MVC POM示例
  19. MongoDB的增、删、改、查操作(五)
  20. Gibs抽样

热门文章

  1. .Net下的PDF打印
  2. requests -- Python
  3. 快速获取 Wi-Fi 密码——GitHub 热点速览 v.21.06
  4. 洛谷P1144-最短路计数-最短路变形
  5. Nginx 版本回滚
  6. springboot(六)Email demo
  7. CURL &amp; Weather
  8. how to design a search component in react
  9. Learning CSS with Chrome DevTools
  10. flex layout &amp; demos