zoukankan      html  css  js  c++  java
  • 2019 HDOJ Multi-University Training Contest Stage 2(杭电多校)

    服务器时不时爆炸,有点难受。

    题目链接:http://acm.hdu.edu.cn/userloginex.php?cid=849


    A:

    神仙题。不可做题。

    B:

    dp。

    C:

    推式子题。

    D:

    边分治。

    E:

    可以数学推理的题。但是显然打表更快找出规律。对打出来的结果做两次差分即可。

     1 /* basic header */
     2 #include <bits/stdc++.h>
     3 /* define */
     4 #define ll long long
     5 #define dou double
     6 #define pb emplace_back
     7 #define mp make_pair
     8 #define sot(a,b) sort(a+1,a+1+b)
     9 #define rep1(i,a,b) for(int i=a;i<=b;++i)
    10 #define rep0(i,a,b) for(int i=a;i<b;++i)
    11 #define eps 1e-8
    12 #define int_inf 0x3f3f3f3f
    13 #define ll_inf 0x7f7f7f7f7f7f7f7f
    14 #define lson (curpos<<1)
    15 #define rson (curpos<<1|1)
    16 #define mid (curl+curr>>1)
    17 /* namespace */
    18 using namespace std;
    19 /* header end */
    20 
    21 const ll mod = 998244353;
    22 
    23 ll qp(ll x, ll b) {
    24     ll ret = 1, base = x;
    25     while (b) {
    26         if (b & 1) ret = ret * base % mod;
    27         base = base * base % mod;
    28         b >>= 1;
    29     }
    30     return ret;
    31 }
    32 
    33 int main() {
    34     ll n;
    35     while (~scanf("%lld", &n)) {
    36         ll k = 0, tmp = 3;
    37         rep1(i, 2, n) k += tmp, tmp += 2;
    38         printf("%lld
    ", k * qp(9, mod - 2) % mod);
    39     }
    40     return 0;
    41 }
    View Code

    F:

    fwt题。

    G:

    不均等博弈题。用surrealnumber秒杀。

    H:

    最小割。

    I:

    求出本质不同的回文串的数量分布(求每种回文串的个数),然后对每种check一下叠加答案。manacher或者字符串hash都可以。

    J:

    签到题。1e6+3的阶乘后面全是0已经暗示一切。

     1 /* basic header */
     2 #include <bits/stdc++.h>
     3 /* define */
     4 #define ll long long
     5 #define dou double
     6 #define pb emplace_back
     7 #define mp make_pair
     8 #define sot(a,b) sort(a+1,a+1+b)
     9 #define rep1(i,a,b) for(int i=a;i<=b;++i)
    10 #define rep0(i,a,b) for(int i=a;i<b;++i)
    11 #define eps 1e-8
    12 #define int_inf 0x3f3f3f3f
    13 #define ll_inf 0x7f7f7f7f7f7f7f7f
    14 #define lson (curpos<<1)
    15 #define rson (curpos<<1|1)
    16 #define mid (curl+curr>>1)
    17 /* namespace */
    18 using namespace std;
    19 /* header end */
    20 
    21 const int mod = 1e6 + 3;
    22 ll p[mod + 10];
    23 int n;
    24 
    25 int main() {
    26     p[0] = p[1] = 1;
    27     rep0(i, 2, mod) p[i] = 1ll * i * p[i - 1] % mod;
    28     while (~scanf("%d", &n)) {
    29         if (n >= mod) {
    30             puts("0");
    31             continue;
    32         }
    33         n %= mod;
    34         printf("%lld
    ", p[n]);
    35     }
    36     return 0;
    37 }
    View Code

    K:

    对于某个区间,首先考虑区间第1、2、3大的边能否构成三角形,然后考虑区间第2、3 、4大的边能否构成三角形,以此类推。

    只要考虑区间前44大即可,因为区间最坏情况是斐波那契数列,然而第45项就爆了1e9的范围。时间复杂度O(44*nlogn)。

     1 /* basic header */
     2 #include <iostream>
     3 #include <cstring>
     4 /* define */
     5 #define ll long long
     6 #define dou double
     7 #define pb emplace_back
     8 #define mp make_pair
     9 #define sot(a,b) sort(a+1,a+1+b)
    10 #define rep1(i,a,b) for(int i=a;i<=b;++i)
    11 #define rep0(i,a,b) for(int i=a;i<b;++i)
    12 #define eps 1e-8
    13 #define int_inf 0x3f3f3f3f
    14 #define ll_inf 0x7f7f7f7f7f7f7f7f
    15 #define lson (curpos<<1)
    16 #define rson (curpos<<1|1)
    17 /* namespace */
    18 using namespace std;
    19 /* header end */
    20 
    21 const int maxn = 1e5 + 10;
    22 int a[maxn];
    23 
    24 struct Node {
    25     int l, r, val[50];
    26 };
    27 
    28 Node segt[maxn << 2];
    29 
    30 void maintain(Node &fa, Node &ls, Node &rs) {
    31     int i = 0, j = 0;
    32     rep0(c, 0, 50) {
    33         if (i >= 50)
    34             fa.val[c] = rs.val[j++];
    35         else if (j >= 50)
    36             fa.val[c] = ls.val[i++];
    37         else if (ls.val[i] < rs.val[j])
    38             fa.val[c] = rs.val[j++];
    39         else fa.val[c] = ls.val[i++];
    40     }
    41 }
    42 
    43 void build(int curpos, int curl, int curr) {
    44     segt[curpos].l = curl, segt[curpos].r = curr;
    45     // memset(segt[curpos].val, 0, sizeof(segt[curpos].val));
    46     if (curl < curr) { // if is not leaf node
    47         int mid = curl + curr >> 1;
    48         build(lson, curl, mid); build(rson, mid + 1, curr);
    49         maintain(segt[curpos], segt[lson], segt[rson]);
    50     } else
    51         segt[curpos].val[0] = a[curl]; // if is leaf node
    52 }
    53 
    54 Node query(int curpos, int curl, int curr) {
    55     if (segt[curpos].l == curl && segt[curpos].r == curr) return segt[curpos];
    56     else {
    57         int mid = segt[curpos].l + segt[curpos].r >> 1;
    58         if (curr <= mid) return query(lson, curl, curr);
    59         else if (curl > mid) return query(rson, curl, curr);
    60         else {
    61             Node lnode = query(lson, curl, mid), rnode = query(rson, mid + 1, curr);
    62             Node ret; ret.l = curl, ret.r = curr;
    63             maintain(ret, lnode, rnode);
    64             return ret;
    65         }
    66     }
    67 }
    68 
    69 int main() {
    70     int n, q;
    71     while (~scanf("%d%d", &n, &q)) {
    72         rep1(i, 1, n) scanf("%d", &a[i]);
    73         build(1, 1, n);
    74         while (q--) {
    75             int l, r; scanf("%d%d", &l, &r);
    76             Node cur = query(1, l, r);
    77             ll ans = -1;
    78             rep0(i, 0, 48) {
    79                 if ((ll)cur.val[i] < (ll)cur.val[i + 1] + (ll)cur.val[i + 2]) {
    80                     ans = (ll)cur.val[i] + (ll)cur.val[i + 1] + (ll)cur.val[i + 2];
    81                     break;
    82                 }
    83             }
    84             printf("%lld
    ", ans);
    85         }
    86     }
    87     return 0;
    88 }
    View Code

    L:

    又是线段树题,背锅。

  • 相关阅读:
    了解语言学习的四个阶段,孩子的英语学习更从容
    MySQL 修改字段类型或长度
    js中退出语句break,continue和return 比较
    PHP中unset,array_splice删除数组中元素的区别
    php判断一个数组是另一个数组的子集
    PHP实现一维数组转二维数组的方法
    基于 HTML5 WebGL 的 3D 网络拓扑图
    SQL 2008下载地址以及全新安装详细过程
    php从数组中取出一段 之 array_slice
    Linux命令:cp (copy)复制文件或目录
  • 原文地址:https://www.cnblogs.com/JHSeng/p/11241234.html
Copyright © 2011-2022 走看看