AtCoder Beginner Contest 136

题目链接

A - +-x

直接取\(max\)即可。

Code
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. typedef long long ll;
  4. const int N = 2e5 + 5;
  5. int main() {
  6. ios::sync_with_stdio(false); cin.tie(0);
  7. int a, b;
  8. cin >> a >> b;
  9. cout << max(a + b, max(a - b, a * b));
  10. return 0;
  11. }

B - One Clue

直接输出,注意判断左右边界。

Code
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. typedef long long ll;
  4. const int N = 2e5 + 5;
  5. int main() {
  6. ios::sync_with_stdio(false); cin.tie(0);
  7. int k, x;
  8. cin >> k >> x;
  9. for(int i = max(-1000000, x - k + 1); i <= min(1000000, x + k - 1); i++) cout << i << ' ';
  10. return 0;
  11. }

C - Green Bin

\(map\)统计\(string\)出现次数即可。

Code
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. typedef long long ll;
  4. const int N = 2e5 + 5;
  5. map <string, int> mp;
  6. string s;
  7. int n;
  8. int main() {
  9. ios::sync_with_stdio(false); cin.tie(0);
  10. cin >> n;
  11. ll ans = 0;
  12. for(int i = 1; i <= n; i++) {
  13. cin >> s;
  14. sort(s.begin(), s.end());
  15. if(mp.find(s) != mp.end()) ans += mp[s];
  16. mp[s]++;
  17. }
  18. cout << ans;
  19. return 0;
  20. }

D - Summer Vacation

时间倒流。

每一个工作只能在某一个时刻之前开始进行才能获得收益。考虑倒序枚举时间,在每一个位置将所有工作加入,取最大收益即可。

Code
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. typedef long long ll;
  4. const int N = 1e5 + 5;
  5. int n, m;
  6. vector <int> c[N];
  7. struct node{
  8. int A, B;
  9. }a[N];
  10. int main() {
  11. ios::sync_with_stdio(false); cin.tie(0);
  12. cin >> n >> m;
  13. for(int i = 1; i <= n; i++) cin >> a[i].B >> a[i].A;
  14. for(int i = 1; i <= n; i++) {
  15. if(a[i].B <= m) c[m - a[i].B].push_back(a[i].A);
  16. }
  17. priority_queue <int> q;
  18. int ans = 0;
  19. for(int i = m - 1; i >= 0; i--) {
  20. for(auto it : c[i]) q.push(it);
  21. if(!q.empty()) {
  22. ans += q.top(); q.pop();
  23. }
  24. }
  25. cout << ans;
  26. return 0;
  27. }

E - Coins Respawn

首先\(dfs\)一次找到所有能够到达\(n\)的点,然后在这些点上面跑\(spfa\)+判正环就行。

Code
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. typedef long long ll;
  4. const int N = 2505, M = 5005;
  5. int n, m, p;
  6. struct Edge{
  7. int u,v,w,next;
  8. }e[M<<1];
  9. int tot, head[N];
  10. void adde(int u,int v,int w){
  11. e[tot].u=u;e[tot].v=v;e[tot].w=w;e[tot].next=head[u];head[u]=tot++;
  12. }
  13. bool ok[N], vis[N];
  14. bool g[N][N];
  15. int c[N], d[N], dis[N];
  16. void dfs(int u) {
  17. ok[u] = 1;
  18. for(int i = 1; i <= n; i++) {
  19. if(g[u][i] && !ok[i]) dfs(i);
  20. }
  21. }
  22. int spfa(int s){
  23. queue <int> q;
  24. memset(d,0xcf,sizeof(d));
  25. memset(vis,0,sizeof(vis));memset(c,0,sizeof(c));
  26. q.push(s);vis[s]=1;d[s]=0;c[s]=1;dis[s]=0;
  27. while(!q.empty()){
  28. int u=q.front();q.pop();vis[u]=0;
  29. if(c[u]>n){
  30. return d[0];
  31. }
  32. for(int i=head[u];i!=-1;i=e[i].next){
  33. int v=e[i].v;
  34. if(!ok[v]) continue;
  35. if(d[v]<d[u]+e[i].w){
  36. d[v]=d[u]+e[i].w;
  37. dis[v]=dis[u]+1;
  38. if(!vis[v]){
  39. vis[v]=1;
  40. q.push(v);
  41. c[v]++;
  42. }
  43. }
  44. }
  45. }
  46. return d[n];
  47. }
  48. int main() {
  49. ios::sync_with_stdio(false); cin.tie(0);
  50. cin >> n >> m >> p;
  51. memset(head, -1, sizeof(head));
  52. for(int i = 1; i <= m; i++) {
  53. int u, v, w; cin >> u >> v >> w;
  54. adde(u, v, w - p);
  55. g[v][u] = 1;
  56. }
  57. dfs(n);
  58. int t = spfa(1);
  59. if(t == d[0]) cout << -1;
  60. else cout << max(0, t);
  61. return 0;
  62. }

F - Polynomial Construction

考虑拉格朗日插值,那么答案就是:

\[y=\sum_{i=0}^{p-1}a_i\prod_{j\neq i}\frac{x-j}{i-j}=\sum_{i=0}^{p-1}a_i\prod_{j\neq i}x-j\prod_{j\neq i}\frac{1}{i-j}
\]

现在就考虑如何快速求\(\prod_{j\neq i}x-j\)。

这部分可以直接递推计算,设\(dp[i][j]\)表示考虑\(\prod_{k=0}^{i}x-k\)的结果中\(x^j\)的系数是多少,那么就有:

  • \(dp[i][0]=dp[i-1][0]*(-i)\)
  • \(dp[i][j]=dp[i-1][j-1]-dp[i-1][j]*i\)

因为式子中有限制条件:\(j\neq i\),那么就考虑如何去掉一个\(x-i\):

  • \(dp[n-1][j]=dp[n-1][j+1](if:i=0)\)
  • \(dp[n-1][j]=\frac{dp[n-1][j]-tmp}{i}(else)\),\(tmp\)表示前面的对后面的贡献。

详见代码:

Code
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. typedef long long ll;
  4. const int N = 3000;
  5. int n, mod;
  6. int a[N], res[N];
  7. ll qp(ll a, ll b) {
  8. ll ans = 1;
  9. while(b) {
  10. if(b & 1) ans = ans * a % mod;
  11. a = a * a % mod;
  12. b >>= 1;
  13. }
  14. return ans;
  15. }
  16. int inv[N], inv2[N];
  17. int dp[N][N];
  18. int add(int x, int y) {
  19. x += y;
  20. if(x >= mod) x -= mod;
  21. return x;
  22. }
  23. int sub(int x, int y) {
  24. x -= y;
  25. if(x < 0) x += mod;
  26. return x;
  27. }
  28. int mul(ll x, ll y) {
  29. x = x * y % mod;
  30. if(x < 0) x += mod;
  31. return x;
  32. }
  33. void pre() {
  34. for(int i = 1; i <= n; i++) inv[i] = qp(i, mod - 2);
  35. for(int i = 1; i <= n; i++) inv2[i] = qp(mod - i, mod - 2);
  36. dp[0][1] = 1;
  37. for(int i = 1; i < n; i++) {
  38. for(int j = 0; j <= i + 1; j++) {
  39. dp[i][j] = mul(dp[i - 1][j], mod - i);
  40. if(j) dp[i][j] = add(dp[i][j], dp[i - 1][j - 1]);
  41. // cout << i << ' ' << j << ' ' << dp[i][j] << '\n';
  42. }
  43. }
  44. }
  45. int main() {
  46. ios::sync_with_stdio(false); cin.tie(0);
  47. cin >> n; mod = n;
  48. for(int i = 0; i < n; i++) cin >> a[i];
  49. pre();
  50. for(int i = 0; i < n; i++) if(a[i]) {
  51. int ans = 1;
  52. for(int j = 0; j < n; j++) {
  53. if(i > j) ans = mul(ans, inv[i - j]);
  54. if(i < j) ans = mul(ans, inv2[j - i]);
  55. }
  56. int tmp = 0;
  57. if(i == 0) tmp = dp[n - 1][1];
  58. res[0] = add(res[0], mul(ans, tmp));
  59. for(int j = 1; j < n; j++) {
  60. tmp = mul(sub(dp[n - 1][j], tmp), inv2[i]);
  61. if(i == 0) tmp = dp[n - 1][j + 1];
  62. res[j] = add(res[j], mul(ans, tmp));
  63. }
  64. }
  65. for(int i = 0; i < n; i++) cout << res[i] << " \n"[i == n - 1];
  66. return 0;
  67. }

AtCoder Beginner Contest 136的更多相关文章

  1. AtCoder Beginner Contest 100 2018/06/16

    A - Happy Birthday! Time limit : 2sec / Memory limit : 1000MB Score: 100 points Problem Statement E8 ...

  2. AtCoder Beginner Contest 052

    没看到Beginner,然后就做啊做,发现A,B太简单了...然后想想做完算了..没想到C卡了一下,然后还是做出来了.D的话瞎想了一下,然后感觉也没问题.假装all kill.2333 AtCoder ...

  3. AtCoder Beginner Contest 053 ABCD题

    A - ABC/ARC Time limit : 2sec / Memory limit : 256MB Score : 100 points Problem Statement Smeke has ...

  4. AtCoder Beginner Contest 137 F

    AtCoder Beginner Contest 137 F 数论鬼题(虽然不算特别数论) 希望你在浏览这篇题解前已经知道了费马小定理 利用用费马小定理构造函数\(g(x)=(x-i)^{P-1}\) ...

  5. AtCoder Beginner Contest 076

    A - Rating Goal Time limit : 2sec / Memory limit : 256MB Score : 100 points Problem Statement Takaha ...

  6. AtCoder Beginner Contest 079 D - Wall【Warshall Floyd algorithm】

    AtCoder Beginner Contest 079 D - Wall Warshall Floyd 最短路....先枚举 k #include<iostream> #include& ...

  7. AtCoder Beginner Contest 064 D - Insertion

    AtCoder Beginner Contest 064 D - Insertion Problem Statement You are given a string S of length N co ...

  8. AtCoder Beginner Contest 075 D - Axis-Parallel Rectangle【暴力】

    AtCoder Beginner Contest 075 D - Axis-Parallel Rectangle 我要崩溃,当时还以为是需要什么离散化的,原来是暴力,特么五层循环....我自己写怎么都 ...

  9. AtCoder Beginner Contest 075 C bridge【图论求桥】

    AtCoder Beginner Contest 075 C bridge 桥就是指图中这样的边,删除它以后整个图不连通.本题就是求桥个数的裸题. dfn[u]指在dfs中搜索到u节点的次序值,low ...

随机推荐

  1. 【IntelliJ IDEA学习之七】maven专题

    版本:IntelliJIDEA2018.1.4 一.maven全局设置 设置Runner 运行VM参数:-Xms128m -Xmx512m -Duser.language=zh -Dfile.enco ...

  2. spring boot2X整合nacos一使用Feign实现服务调用

    服务调用有两种方式: A.使用RestTemplate 进行服务调用 查看 B.使用Feign 进行声明式服务调用 上一次写了使用RestTemplate的方式,这次使用Feign的方式实现 服务注册 ...

  3. SVN版本管理系统使用教程

    1.下载SVN安装包 https://tortoisesvn.net/downloads.html 2.下载SVN汉化包 网页下翻到下载处 3.下载服务端 https://www.visualsvn. ...

  4. unity的yield

    这里说的是Unity通过StartCoroutine开启IEnumerator协程里的yield相关 1.yield return 0,yield return null 等待下一帧接着执行下面的内容 ...

  5. Effective.Java第23-33条(泛型相关)

    23.  类结构层次优于标签类 有时你会碰到一个类,它的实例有一个或多个风格,并且包含一个tag属性表示实例的风格.例如,如下面的类表示一个圆或者矩形: public class Figure { / ...

  6. Visual Studio pro key license 2019

    仅供学习交流使用,勿用作其他用途!!!!   Visual Studio 2019 Enterprise BF8Y8-GN2QH-T84XB-QVY3B-RC4DF Visual Studio 201 ...

  7. ES7.3.0配置

    # elasticsearch.yml cluster.name: my-application node.name: node-1 node.master: true node.ingest: tr ...

  8. Xgboost GPU配置

    眼残cmake版本配错了搞了半天,简单记录一下,老规矩,参考一下官方的文档. git clone --recursive https://github.com/dmlc/xgboost cd xgbo ...

  9. Spring4参考手册中文版

    Spring4参考手册中文版 前言 https://github.com/b2gats/stone-docs/blob/master/spring-4-beans.md Part III. 核心技术 ...

  10. javaScript 对象的hasOwnProperty方法打印window自定义属性

    for (var name in window) { if (window.hasOwnProperty(name)) { window.console.log ( name + " : & ...