部分题目列表:

题号 题目 算法
B题 密码学 签到题,字符串处理
H题 最大公约数 数学、gcd、大数
F题 乘法 较为巧妙的使用二分
A题 期望逆序对 -
C题 染色图 -
I题 K小数查询 在线线段树套权值线段树

B题 密码学

签到题,就是一个字符串的计算,可耻的WA了一发是因为忘记了解码要倒着去解(iii 从 mmm 到 000)

#include<bits/stdc++.h>
using namespace std;const int maxn = 1005;
int a[maxn], b[maxn];
string str[maxn];
int s[maxn][105];void dde(int k)
{for (int i = 0; i < str[k].size(); i++) {if (str[k][i] > 'Z')s[k][i] = str[k][i] - 'a';elses[k][i] = str[k][i] - 'A' + 26;}
}int main(void)
{int n, m;scanf("%d%d", &n, &m);for (int i = 0; i < m; i++)scanf("%d%d", &a[i], &b[i]);for (int i = 1; i <= n; i++)cin >> str[i];for (int i = m - 1; i >= 0; i--) {int x = a[i], y = b[i];string aa = str[x], bb = str[y];while (str[x].size() < str[y].size())str[x] = str[x] + str[x];for (int j = 0; j < str[y].size(); j++) {dde(x), dde(y);int kkk = s[y][j] - s[x][j];kkk = (kkk + 52) % 52;if (kkk < 26)bb[j] = kkk + 'a';elsebb[j] = kkk - 26 + 'A';}str[x] = aa;str[y] = bb;}for (int i = 1; i <= n; i++)cout << str[i] << endl;return 0;
}

H题 最大公约数

Java大数走起

题干:有三个人 A,B,CA,B,CA,B,C,其中 AAA 和 BBB 共享了一个神秘的数字 kkk,已知 1≤k≤n1≤k≤n1≤k≤n, 现在 AAA 和 CCC 说:“kkk 的值等于 xxx”。
CCC 不太信任 AAA,于是想向 BBB 确认一下 kkk 是否真的等于 xxx。BBB 虽然不想直接把 kkk 的值告诉 CCC,但是 BBB 允许 CCC 给出一个正整数 yyy(注意 yyy 可以大于 nnn),然后 BBB 会回答 gcd(k,y)gcd(k,y)gcd(k,y)。
现在给出 k,nk,nk,n,你需要帮助 CCC 决定这样的 yyy 的取值,使得 CCC 一定可以通过 BBB 的回答来判断 AAA 有没有撒谎。如果这样的 yyy 有多个,你需要输出最小的那个。

输入第一行是一个整数 T(1≤T≤50)T(1≤T≤50)T(1≤T≤50)。
对于每组数据,输入一行两个整数 n,k(1≤k≤n≤500)n,k(1≤k≤n≤500)n,k(1≤k≤n≤500)。

对于每组数据,输出一行一个整数,表示答案。如果满足条件的 yyy 不存在,则输出 −1。

// package Main;
import java.util.*;
import java.math.*;
public class Main {static BigInteger arr[] = new BigInteger[505];static BigInteger m(int a) {return new BigInteger(a + "");}static boolean isP(int x) {for (int i = 2; i * i <= x; i++) if (x % i == 0) return false;return true;}static void init() {arr[1] = BigInteger.ONE;for (int i = 2; i <= 500; i++) {if (isP(i)) arr[i] = arr[i - 1].divide(arr[i - 1].gcd(m(i))).multiply(m(i));else arr[i] = arr[i - 1];}}public static void main(String[] args) {init();Scanner sc = new Scanner(System.in);int t = sc.nextInt();while (t-- != 0) {int n = sc.nextInt();int k = sc.nextInt();BigInteger ans = arr[n / k].multiply(m(k));System.out.println(ans);}}
}

F题 乘法

题意:给出一个长度为 nnn 的数列和一个长度为 mmm 的数列, 可以构造得到一个 n×mn×mn×m 的矩阵 CCC,其中 Ci,j=Ai×BjC_{i,j}=A_{i}×B_{j}Ci,j​=Ai​×Bj​, 给出整数 KKK,你需要求出 CCC 中第 KKK 大的数的值。(1≤n,m≤1051≤n,m≤10^{5}1≤n,m≤105, 1≤K≤n×m1≤K≤n×m1≤K≤n×m)

思路:二分的找,需要额外注意当数为负数和零时候的情况

#include <bits/stdc++.h>
using namespace std;#define IO ios::sync_with_stdio(false), cin.tie(0), cout.tie(0)
typedef long long ll;
const int maxn = 1e5 + 5;ll ef = 1e12;
ll n, m, k;
vector<ll> a, b;ll update_a(ll x, ll mid, ll l, ll r)
{if (l == r)return l;int m = (l + r + 1) >> 1;if (x * b[m] <= mid)return update_a(x, mid, m, r);elsereturn update_a(x, mid, l, m - 1);
}ll update_b(ll x, ll mid, ll l, ll r)
{if (l == r)return l;int m = (l + r) >> 1;if (x * b[m] <= mid)return update_b(x, mid, l, m);elsereturn update_b(x, mid, m + 1, r);
}ll Binary_Search(ll l, ll r)
{if (l == r)return l;ll mid = (l + r) >> 1;ll ans = 0;for (int i = 0; i < a.size(); i++) {if (a[i] < 0)ans += m - update_b(a[i], mid, 0, b.size());elseans += update_a(a[i], mid, -1, b.size() - 1) + 1;}if (ans >= k)return Binary_Search(l, mid);elsereturn Binary_Search(mid + 1, r);
}int main(void)
{IO;cin >> n >> m >> k;k = n * m - k + 1;ll tmp;for (int i = 0; i < n; i++) {cin >> tmp;a.push_back(tmp);}for (int i = 0; i < m; i++) {cin >> tmp;b.push_back(tmp);}sort(a.begin(), a.end());sort(b.begin(), b.end());cout << Binary_Search(-ef, ef) << endl;return 0;
}

A题 期望逆序对

题意:生成一个每个数aia_{i}ai​是从 [li,ri][l_{i}, r_{i}][li​,ri​] 中生成的整数,aaa 中不存在相同的数字,求逆序对个数的期望的最小值, 数组范围至5e35e35e3.
输出一行一个整数,表示答案对 998244353 取模后的值。假设答案的最简分数表示是 ab\frac{a}{b}ba​, 你需要输出一个整数 kkk 满足 x×y≡xmod998244353x \times y \equiv x \; mod \;998244353x×y≡xmod998244353

#include<bits/stdc++.h>
using namespace std;const int mod = 998244353;
const int maxn = 5050;struct section {int l, r;void read() {scanf("%d%d", &l, &r);}bool operator < (const section& s1) {return l + r < s1.l + s1.r;}
}a[maxn];int n, b[maxn];int quick(int x, int y)
{int z = 1;while (y) {if (y & 1)z = 1ll * z * x % mod;y >>= 1;x = 1ll * x * x % mod;}return z;
}int cal(section x, section y)
{int l = max(x.l, y.l);if (l > x.r)return 0;int r = min(x.r, y.r);int ans = 1ll * (l - y.l + r - y.l) * (r - l + 1) / 2 % mod;ans = (ans + 1ll * (x.r - r) * (y.r - y.l + 1)) % mod;return ans;
}int main(void)
{scanf("%d", &n);for (int i = 1; i <= n; i++)a[i].read();sort(a + 1, a + n + 1);int ans = 0;for (int i = 1; i <= n; i++)b[i] = quick(a[i].r - a[i].l + 1, mod - 2);for (int i = 1; i <= n; i++)for (int j = i + 1; j <= n; j++)ans = (ans + 1ll * b[i] * b[j] % mod * cal(a[i], a[j])) % mod;printf("%d\n", ans);return 0;
}

C题 染色图

—待补—

I题 K小数查询

树套树之线段树套权值线段树,在线维护

—待补—

2020 CCPC-Wannafly Winter Camp Day1 总结相关推荐

  1. 阔力梯的树(2020 CCPC Wannafly Winter Camp Day2 Div.12 )dsu on tree

    题解: dsu on tree dsu on tree的基本步骤就不说了 看到这题询问结点的子树问题,而且询问时离线的,首先想到的dsu on tree的这个trick. 本题的难题就是如何维护结点所 ...

  2. 2020 CCPC Wannafly Winter Camp Day3 部分题解(ACEFG)

    查看题目 A 黑色气球 题意: n个气球,每个气球高度为正整数.给你每两个气球之间的高度和,还原出所有气球的高度,保证答案唯一. 解题思路: 签到题,因为高度的范围不大,直接枚举第一个气球的高度,检测 ...

  3. 2020 CCPC Wannafly Winter Camp Day2 Div.12——A 托米的字符串【构造、数学】

    题目传送门 题目描述 托米有一个字符串,他经常拿出来玩.这天在英语课上,他学习了元音字母 a , e , i , o , u {a,e,i,o,u} a,e,i,o,u 以及半元音 y {y} y . ...

  4. 2020 CCPC Wannafly Winter Camp Day6 M—自闭——模拟

    链接:https://ac.nowcoder.com/acm/contest/4137/M 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524 ...

  5. 2020 CCPC Wannafly Winter Camp Day7 K 修炼

    题意: 一个游戏,规则如下: 有六个值 v 1 , v 2 , a 1 , a 2 , b 1 , b 2 v_1,v_2,a_1,a_2,b_1,b_2 v1​,v2​,a1​,a2​,b1​,b2 ...

  6. CCPC-Wannafly Winter Camp Day1 自闭总结

    CCPC-Wannafly Winter Camp Day1 (Div2, onsite) 出现了巨大失误 E题原来的思路是预处理后求最大生成树的,后来发现点所连的边数不定(n<=100当然是可 ...

  7. 2019 CCPC wannfly winter camp Day 5

    C - Division 思路:我们考虑到一点,从大往小取得顺序是不会有问题的,所以可以直接主席树,但是开不下空间,我们可以log分段求. #include<bits/stdc++.h> ...

  8. 2019 wannafly winter camp day5-8代码库

    目录 day5 5H div2 Nested Tree (树形dp) 5F div2 Kropki (状压dp) 5J div1 Special Judge (计算几何) 5I div1 Sortin ...

  9. Wannafly Winter Camp Day 3 G排列(贪心)

    思路来源 jls%%% 题解 赛后补队友AC的水题可还行 最先出现的单减子序列对应的位置,一定是那些最小值的位置 先把那些放满,剩下的贪心选使字典序最小,就把剩下的从前到后扫一遍从小到大放 代码 #i ...

最新文章

  1. python读取文件中的数据为二维数组变量_Numpy 多维数据数组的实现
  2. H5存储------localStorage和sessionStorage
  3. 【Linux - mysql】怎么修改数据库编码
  4. java 只运行一次吗_java程序循环只执行一次的问题
  5. English trip -- Phonics 3 元音字母e
  6. 同方知网软件_国产精品软件天若OCR:支持图像识别/自动翻译/公式识别等
  7. 安全模式:天猫 App 启动保护实践
  8. android 登录界面 布局,Android基本布局和登录界面的设计
  9. win10开启cpu虚拟化
  10. c语言if的作用,c语言if语句的用法
  11. 18.ARP报文格式详解
  12. click与onclick的区别
  13. android接口调试工具
  14. 有什么高效的Windows笔记软件?3款优秀的笔记软件推荐!
  15. HTML——前端实时可视化开发工具
  16. 【网络问题】微软商店无法打开:重试该操作,无法加载页面。请稍后重试
  17. 推荐一个好用的开源的报表平台——JNPF可视化平台
  18. HTML5期末大作业:电商购物网站设计——红色的服装商城B2C网站(40页) HTML+CSS+JavaScript 电商购物功能齐全 dw网页设计 大学生商城购物网站
  19. 大学生学完python靠几个接单网站兼职,实现经济独立
  20. 【java调用webservice接口方法】

热门文章

  1. CSS控制字体在一行内显示不换行
  2. 电信运营商如何玩转大数据?
  3. ios开发日记-18上传appStore时,遇到错误,代码为ERROR ITMS-90049
  4. 如何在Mac环境下搭建svn服务器端环境
  5. android binder机制之——(创建binder服务)
  6. 介绍并扩展Fitnesse的测试模块化机制:Scenario
  7. Loadrunner进行md5加密方法
  8. Lua中的基本函数库
  9. 田志刚:要你共享,但不告诉你共享什么
  10. docker手册_Docker手册