首页 > 其他分享 >10.3 总结

10.3 总结

时间:2024-10-12 09:00:17浏览次数:8  
标签:总结 10.3 return int ll kMaxN long include

T1

每一个数列有 \(m\) 种变式,而总共有 \(m^n\) 个数列,所以答案是 \(m^{n-1}\),赛事 AC 了

#include <fstream>

using namespace std;
using ll = long long;

const ll kMod = 1e9 + 7;

ifstream cin("sum.in");
ofstream cout("sum.out");

ll t, n, m;

ll fpow(ll a, ll b) {
  ll res = 1;
  for (; b; res = b & 1 ? res * a % kMod : res, b >>= 1, a = a * a % kMod) {
  }
  return res % kMod;
}

int main() {
  for (cin >> t; t; t--) {
    cin >> n >> m;
    cout << fpow(m, n - 1) << '\n';
  }
  return 0;
}

T2

一道 DP 题,终点是如何对 dp 数组转移。

具体来讲,枚举可能的运输时间,再运输时间的限制下进行背包DP,时间复杂度 \(O(b^2(\sum a_i)^2)\)。

#include <algorithm>
#include <cmath>
#include <cstdio>
#include <cstring>
#include <fstream>

using namespace std;

const int kMaxN = 50;

ifstream cin("fruit.in");
ofstream cout("fruit.out");

long long n, a[kMaxN], b[3], c[3][kMaxN], d[3][kMaxN], u[3][kMaxN], f[kMaxN][kMaxN][kMaxN][kMaxN][2], ans = 3e15;

int main() {
  cin >> n;
  for (int i = 1; i <= n; i++) {
    cin >> a[i];
  }
  cin >> b[1] >> b[2];
  for (int i = 1; i <= n; i++) {
    cin >> c[1][i];
  }
  for (int i = 1; i <= n; i++) {
    cin >> c[2][i];
  }
  for (int i = 1; i <= n; i++) {
    cin >> d[1][i];
  }
  for (int i = 1; i <= n; i++) {
    cin >> d[2][i];
  }
  for (int i = 1; i <= n; i++) {
    cin >> u[1][i];
  }
  for (int i = 1; i <= n; i++) {
    cin >> u[2][i];
  }
  for (int i = 1; i <= n; i++) {
    for (int j = 0; j <= a[i]; j++) {
      for (int k = 0; k <= b[1]; k++) {
        for (int l = 0; l <= b[2]; l++) {
          f[i][j][k][l][0] = f[i][j][k][l][1] = 3e15;
        }
      }
    }
  }
  f[0][0][0][0][0] = f[0][0][0][0][1] = 0;
  for (int i = 0; i <= n; i++) {
    for (int j = 0; j <= a[i]; j++) {
      for (int k = 0; k <= b[1]; k++) {
        for (int l = 0; l <= b[2]; l++) {
          if (a[i + 1] == 0) {
            f[i + 1][j][k][l][0] = f[i][j][k][l][0];
            f[i + 1][j][k][l][1] = f[i][j][k][l][1];
            continue;
          }
          for (int p = 0; p <= a[i + 1]; p++) {
            long long tmp = max(f[i][j][k][l][0], max(d[2][i + 1] * (a[i + 1] - p), d[1][i + 1] * p)) + max(f[i][j][k][l][1], max(u[2][i + 1] * (a[i + 1] - p), u[1][i + 1] * p));
            if (p == 0) {
              if (tmp < f[i + 1][p][k][l + c[2][i + 1]][0] + f[i + 1][p][k][l + c[2][i + 1]][1]) {
                f[i + 1][p][k][l + c[2][i + 1]][0] = max(f[i][j][k][l][0], max(d[2][i + 1] * (a[i + 1] - p), d[1][i + 1] * p));
                f[i + 1][p][k][l + c[2][i + 1]][1] = max(f[i][j][k][l][1], max(u[2][i + 1] * (a[i + 1] - p), u[1][i + 1] * p));
              }
            } else if (p == a[i + 1]) {
              if (tmp < f[i + 1][p][k + c[1][i + 1]][l][0] + f[i + 1][p][k + c[1][i + 1]][l][1]) {
                f[i + 1][p][k + c[1][i + 1]][l][0] = max(f[i][j][k][l][0], max(d[2][i + 1] * (a[i + 1] - p), d[1][i + 1] * p));
                f[i + 1][p][k + c[1][i + 1]][l][1] = max(f[i][j][k][l][1], max(u[2][i + 1] * (a[i + 1] - p), u[1][i + 1] * p));
              }
            } else {
              if (tmp < f[i + 1][p][k + c[1][i + 1]][l + c[2][i + 1]][0] + f[i + 1][p][k + c[1][i + 1]][l + c[2][i + 1]][1]) {
                f[i + 1][p][k + c[1][i + 1]][l + c[2][i + 1]][0] = max(f[i][j][k][l][0], max(d[2][i + 1] * (a[i + 1] - p), d[1][i + 1] * p));
                f[i + 1][p][k + c[1][i + 1]][l + c[2][i + 1]][1] = max(f[i][j][k][l][1], max(u[2][i + 1] * (a[i + 1] - p), u[1][i + 1] * p));
              }
            }
          }
        }
      }
    }
  }
  for (int j = 0; j <= a[n]; j++) {
    for (int k = 0; k <= b[1]; k++) {
      for (int l = 0; l <= b[2]; l++) {
        ans = min(ans, f[n][j][k][l][0] + f[n][j][k][l][1]);
      }
    }
  }
  cout << ans;
  return 0;
}

T3

T4

一道 Kruskal加上LCA的题目,超级缝合怪,出题人还卡long long ,所以要用 int128。

#include <algorithm>
#include <fstream>
#include <vector>

using namespace std;
using ll = long long;
using i128 = __int128;

const ll kMaxN = 2e5 + 1;

ifstream cin("run.in");
ofstream cout("run.out");

int n, m, k, t0, ans, fat[kMaxN];
struct Side {
  ll u, v, w;
} s[kMaxN];
struct Node {
  int f[20], d;
  i128 s;
  vector<pair<int, ll>> e;
} v[kMaxN];

int Find(int x) {
  return fat[x] = fat[x] == x ? x : Find(fat[x]);
}

void Walk(int x, int fa) {
  v[x].d = v[fa].d + 1, v[x].f[0] = fa;
  for (auto i : v[x].e) {
    ll y = i.first, z = i.second;
    if (y != fa) {
      v[y].s = v[x].s + z;
      Walk(y, x);
    }
  }
}

void CalcF() {
  for (ll j = 1; j < 20; j++) {
    for (ll i = 1; i <= n; i++) {
      v[i].f[j] = v[v[i].f[j - 1]].f[j - 1];
    }
  }
}

ll LCA(ll x, ll y) {
  if (v[x].d < v[y].d) {
    swap(x, y);
  }
  for (ll i = 19; i >= 0; i--) {
    if (v[v[x].f[i]].d >= v[y].d) {
      x = v[x].f[i];
    }
  }
  if (x == y) {
    return x;
  }
  for (ll i = 19; i >= 0; i--) {
    if (v[x].f[i] != v[y].f[i]) {
      x = v[x].f[i], y = v[y].f[i];
    }
  }
  return v[x].f[0];
}

ll Len(ll x, ll y) {
  return v[x].d + v[y].d - 2 * v[LCA(x, y)].d - 1;
}

i128 Dis(ll x, ll y) {
  return v[x].s + v[y].s - 2 * v[LCA(x, y)].s;
}

void print(i128 x) {
  if (x >= 10) {
    print(x / 10);
  }
  cout.put(x % 10 + '0');
}

int main() {
  cin >> n >> m;
  for (int i = 1; i <= n; i++) {
    fat[i] = i;
  }
  for (int i = 1; i <= m; i++) {
    cin >> s[i].u >> s[i].v >> s[i].w;
  }
  // 最小生成树 begin
  sort(s + 1, s + m + 1, [](Side a, Side b) { return a.w < b.w; });
  for (int i = 1; i <= m; i++) {
    int x = s[i].u, y = s[i].v, w = s[i].w;
    int fx = Find(x), fy = Find(y);
    if (fx != fy) {
      fat[fy] = fx;
      v[x].e.push_back({y, w});
      v[y].e.push_back({x, w});
    }
  }
  // 最小生成树 end

  // LCA begin
  Walk(1, 0), CalcF();
  // LCA end

  // 回答 begin
  cin >> k >> t0;
  ll lst = 0;
  i128 ans = 0, cnt = 0;
  for (ll i = 1, x; i <= k; i++) {
    cin >> x;
    if (i != 1) {
      cnt += Len(lst, x);
      ans += Dis(lst, x);
    }
    cnt += (i != 1 && i != k);
    lst = x;
  }
  ans += cnt * t0;
  print(ans);
  return 0;
}

标签:总结,10.3,return,int,ll,kMaxN,long,include
From: https://www.cnblogs.com/GenesisCrystal/p/18446924

相关文章

  • 10.9 总结
    T1还行,考场AC了。主要思路就是从第一列开始,对于上一列每一个一样的数的区间进行排序,最后检验一下就行了,注意对应的问题。#include<algorithm>#include<fstream>#include<vector>usingnamespacestd;constintkMaxN=305;ifstreamcin("exchange.in");ofstreamc......
  • 量化交易中常见技术指标梳理和总结
    量化交易中常见技术指标梳理和总结一、移动平均线(MA,MovingAverage)基本概念和由来​移动平均线是一种通过计算一段时间内价格的平均值来平滑价格数据的指标,用于识别价格趋势。​移动平均线的出现,很难追溯到某一个特定的人,它是在长期的市场实践和统计分析中逐渐形成......
  • LeetCode题练习与总结:单词规律--290
    一、题目描述给定一种规律 pattern 和一个字符串 s ,判断 s 是否遵循相同的规律。这里的 遵循 指完全匹配,例如, pattern 里的每个字母和字符串 s 中的每个非空单词之间存在着双向连接的对应规律。示例1:输入:pattern="abba",s="dogcatcatdog"输出:tr......
  • 105th 2024/10/11 模拟赛总结61
    傲慢,凭什么傲慢T1开幕雷击,认为水飞了”一眼CDQ板子啊“然后十五分钟时直接开打主要原因绝对是因为昨天场切了T1,所以飘起来了还是应该稳重一点,起码模几个不同数据再下定论实际上也真是水题,相当于板子了自己对排列不够熟悉,真的没想到是直接全局-部分正难则反?从没用上过自以......
  • 104th 2024/10/8 模拟赛总结60
    T1有感觉,因为AB组一起打,所以下意识认为是水题(实际上也不算难?)就直接开始想从深向浅直接扫一遍,能转就转显然错,从浅向深扫一遍同样不对,因为不知道往上转移的顺序比如,设该点为x,是0,有的儿子可能转移到x,其子树内转移的次数比另一个儿子多,所以就要优先它不好处理,看到数据,给了一档2e5,一......
  • 10.11日noip多校联考总结
    10.11日noip多校联考总结T1看到感觉像是一个很玄学的题目,在考场上推了大概一个多小时,又写了大概半个小时,终于调出来了。谨记:三分取mid需要进行浮点数运算。对于每一行和每一列定义两个数组来记录要加多少,因为我们只需要知道其中任意一个数就可以推出所有的数,那么考虑枚举x0,来......
  • 问题定位总结:java空字符
    在线上业务中,有个校验,校验用户输入的信息与现在表里存的信息数据是否一致。比较时忽略首尾的空字符。但收到用户反馈,在页面填入的数据和表里存的数据一致。校验却不通过。假设表里存的是“CSDN专业开发者社区”,用户填写的是“CSDN专业开发者社区   ”,后面带有空格。对于用......
  • CSS居中方法总结
    一、行内元素(1)水平居中  1.通过text-align:center<divclass="parent"><spanclass="child">我是行内元素</span></div>.parent{background-color:red;text-align:center;} 2.通过fit-content给父元素的宽度加上width:fit-cont......
  • 10.9总结
    今天,没啥课,就上了数据结构和统一建模,对于统一建模,我上了三节课,总感觉模模糊糊的,可能是还没有做具体任务作业的原因吧,对于数据结构,我们继续向后学习了算法栈和队列,了解了共享栈,入栈,出栈的顺序栈的实现还有链式栈的实现入栈:Statuspush(Sqstack&s,inte){if(s.top-s.base==s.......
  • 2024红队必备工具列表总结_railgun工具
    一、信息收集1、AppInfoScanner一款适用于以HVV行动/红队/渗透测试团队为场景的移动端(Android、iOS、WEB、H5、静态网站)信息收集扫描工具,可以帮助渗透测试工程师、红队成员快速收集到移动端或者静态WEB站点中关键的资产信息并提供基本的信息输出,如:Title、Domain、CDN、......