杭电多校(二)2019.7.24--暑假集训

【HDU 6591】

UNSOLVED



【HDU 6592】

UNSOLVED



【HDU 6593】

UNSOLVED



【HDU 6594】

UNSOLVED



【HDU 6595】

SOLED

概率期望,算是一道纯数学题

#include<cstdio>
#include<iostream>
#define ll long long
const int MAXN = 3001;
const int mod  = 998244353;
ll ans[MAXN];
ll qpower(ll a, ll x)
{
    ll res = 1;
    ll down = a;
    while (x)
    {
        if (x & 1)
        {
            res = (res*down) % mod;
        }
        down = (down*down) % mod;
        x = x >> 1;
    }
    return res;
}
void init()
{
    for (int i = 1; i <MAXN; i++)
    {
        ans[i] = ((i * (i - 1))%mod)*qpower(3, mod - 2);
        ans[i] %= mod;
        ans[i] = (ans[i] + ans[i - 1]) % mod;
    }
    for (int i = 1; i < MAXN; i++)
    {
        ans[i] = (ans[i] * qpower(i, mod - 2))%mod;
    }
}
signed main()
{
    int n;
    init();
    while (~scanf("%d",&n))
    {
        printf("%lld\n", ans[n]);
    }
    return 0;
}



【HDU 6596】

UNSOLVED



【HDU 6597】

UNSOLVED

不平等博弈



【HDU 6598】

UNSOLVED

建图+网络流



【HDU 6599】

回文

UNSOLVED



【HDU 6600】

UNSOLVED

 



【HDU 6601】

SOLED

【题目大意】

给定一个长度为n的整数序列,给定m次询问,每次询问区间内整数能够合法组成三角形的最大长度

【思路】

基本上是裸的主席树,找到区间第1大,第2大,第3大,然后计算合法性,如果不合法,找第2大,第3大,第4大,以此类推

因为三角形边长的合法情况是一个斐波那契数列,所以查找次数不会超过44次,时间复杂度较小

【知识点】:主席树

#include<cstdio>
#include<iostream>
#include<algorithm>
#define ll long long
using namespace std;
const int MAXN = 200010;
const int MAXM = 200010;
int lsan[MAXN], a[MAXN],T[MAXN];
int sum[21*MAXN], ls[21 * MAXN], rs[21 * MAXN];
int n, m;
int cnt;
int build(int l, int r)
{
    int root=++cnt;
    sum[root] = 0;
    int mid = (l + r) >> 1;
    if (l < r)
    {
        ls[root] = build(l, mid);
        rs[root] = build(mid + 1, r);
    }
    return root;
}
int update(int pre, int l, int r,int x)
{
    int root=++cnt;
    sum[root] = sum[pre] + 1;
    ls[root] = ls[pre];
    rs[root] = rs[pre];
    int mid = (l + r) >> 1;
    if (l < r)
    {
        if (x <= mid)
            ls[root] = update(ls[pre], l, mid, x);
        else
            rs[root] = update(rs[pre], mid + 1, r,x);
    }
    return root;
}
int query(int l,int r,int x, int y, int num)
{
    if (l >= r)
        return l;
    int t = sum[rs[y]] - sum[rs[x]];
    int mid = (l + r) >> 1;
    if (t>=num)
        return query(mid + 1, r, rs[x], rs[y], num);
    else
        return query(l, mid, ls[x], ls[y], num-t);
}
int main()
{
    while (~scanf("%d%d", &n, &m))
    {
        cnt = 0;
        for (int i = 1; i <= n; i++)
        {
            scanf("%d", &a[i]);
            lsan[i] = a[i];
        }
        sort(lsan + 1, lsan + 1 + n);
        int maxn = unique(lsan + 1, lsan + 1 + n) - lsan - 1;
        T[0] = build(1, maxn);
        for (int i = 1; i <= n; i++)
        {
            int t = lower_bound(lsan + 1, lsan + 1 + maxn, a[i]) - lsan;
            T[i] = update(T[i - 1], 1, maxn, t);
        }
        for (int i = 1; i <= m; i++)
        {
            int x, y, k;
            scanf("%d%d", &x, &y);
            int cal = 0;
            ll l1=0, l2=0, l3=0;
            cal = 0;
            while ((l1 + l2 <= l3 || l1 + l3 <= l2 ||l2 + l3 <= l1) &&cal+3<=y+1-x)
            {
                l1 = lsan[query(1, maxn, T[x - 1], T[y], ++cal)];
                l2 = lsan[query(1, maxn, T[x - 1], T[y], ++cal)];
                l3 = lsan[query(1, maxn, T[x - 1], T[y], ++cal)];
                cal -= 2;
            }
            if (l1 + l2 > l3 && l1 + l3 > l2 &&l2 + l3 > l1)
                printf("%lld\n", l1 + l2 + l3);
            else
                printf("-1\n");
        }
    }
    return 0;
}



【HDU 6602】

UNSOLVED

线段树



UNSOLVED

原文地址:https://www.cnblogs.com/rentu/p/11241030.html

时间: 2024-10-27 12:52:12

杭电多校(二)2019.7.24--暑假集训的相关文章

2019杭电多校二 L Longest Subarray (线段树)

大意: 给定序列$a$, 元素范围$[1,C]$, 求一个最长子序列, 满足每个元素要么不出现, 要么出现次数$\le K$. 枚举右端点, 考虑左端点合法的位置. 显然一定是$C$种颜色合法位置的并, 可以用线段树维护合法颜色的种类数, 每次二分出最小的满足合法个数为$C$的位置更新答案. 考虑右端点移动到$i$, 存在一个位置$p$, 满足 对于颜色$a_i$的合法区间为$[1,p]$, 不合法区间为$[p+1,i]$. 可以求出上一次计算的$a_i$合法位置的增量与不合法位置的增量, 用线

2019杭电多校二 F. Fantastic Magic Cube (FWT)

大意: 给定$N^3$立方体, 每个单位立方体权值为三个坐标异或, 每次沿坐标轴切一刀, 得分为两半内权值和的乘积, 求切成$n^3$块的最大得分. 可以发现得分与切法无关, 假设每个点权值为$a_i$, 就有$ans=\frac{(\sum a_i)^2-\sum a_i^2}{2}$. 从而转化为求$f_x=\sum\limits_{i=0}^{N-1}\sum\limits_{j=0}^{N-1}\sum\limits_{k=0}^{N-1}[(i\oplus j\oplus k)=x]$

2019杭电多校第九场

2019杭电多校第九场 熟悉的后半场挂机节奏,又苟进首页了,很快乐 1001. Rikka with Quicksort upsolved 不是我做的,1e9调和级数分段打表 1002. Rikka with Cake solved at 01:11 有一个矩形,给你很多射线(射线只有横平竖直的四个方向),问把矩形切成了多少块 队友说答案是交点数加一,作为一个合格的工具人,当然是把队友的想法实现啦 二维坐标离散化枚举纵坐标维护横坐标,常规套路,树状数组也可以做(我是线段树写习惯了根本没想起来还有

HDU 4901(杭电多校训练#3 1005题)The Romantic Hero(DP)

题目地址:HDU 4901 这题没想到最后居然能够做出来.... 这题用了两次DP,先从前往后求一次异或的,再从后往前求一次与运算的.分别是 1:求异或的时候,定义二维数组huo[1000][1024],前者指第几位,后者是哈希的思想,若huo[x][y]=2则表示最右边的数为第x位时,异或值为y的出现了两次,需要再定义一个hash数组,来保存前面出现的所有情况,再找有多少位的时候,用hash数组中出现的所有的值与当前的第x位的数字进行异或. 2:求与的时候,定义二维数组yu[1000][102

HDU 4864 Task (贪心+STL多集(二分)+邻接表存储)(杭电多校训练赛第一场1004)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4864 解题报告:有n台机器用来完成m个任务,每个任务有一个难度值和一个需要完成的时间,每台机器有一个可以工作的最长时间和一个可以完成的任务的难度的最大值, 一台机器能完成一个任务的条件是这台机器的最长工作时间和能完成任务的难度值必须都大于等于这个任务,而且一台机器最多完成一个任务,假设一个任务的时间为t,难度值为x,那么完成这个任务可以赚到的钱 money = 500 * t + 2 * x; 现在

HDU 4902 Nice boat 2014杭电多校训练赛第四场F题(线段树区间更新)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4902 解题报告:输入一个序列,然后有q次操作,操作有两种,第一种是把区间 (l,r) 变成x,第二种是把区间 (l,r) 中大于x的数跟 x 做gcd操作. 线段树区间更新的题目,每个节点保存一个最大和最小值,当该节点的最大值和最小值相等的时候表示这个区间所有的数字都是相同的,可以直接对这个区间进行1或2操作, 进行1操作时,当还没有到达要操作的区间但已经出现了节点的最大值跟最小值相等的情况时,说明

HDU 4941 Magical Forest(map映射+二分查找)杭电多校训练赛第七场1007

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4941 解题报告:给你一个n*m的矩阵,矩阵的一些方格中有水果,每个水果有一个能量值,现在有三种操作,第一种是行交换操作,就是把矩阵的两行进行交换,另一种是列交换操作,注意两种操作都要求行或列至少要有一个水果,第三种操作是查找,询问第A行B列的水果的能量值,如果查询的位置没有水果,则输出0. 因为n和m都很大,达到了2*10^9,但水果最多一共只有10^5个,我的做法是直接用结构体存了之后排序,然后m

HDU 4937 (杭电多校 #7 1003题)Lucky Number(瞎搞)

题目地址:HDU 4937 多校的题以后得重视起来...每道题都错好多次...很考察细节.比如这道....WA了无数次.... 这题的思路自己真心想不到...这题是将进制后的数分别是1位,2位,3位和更多位的分开来计算. 当是1位的时候,显然只有3到6,此时只能是-1 当是2位的时候,可以转换成一元一次方程求解 当是3位的时候,可以转换成一元二次方程求解 当是4位的时候,此时最多也只有7000个数,7000^3接近1e12.所以剩下的直接枚举进制数来判断即可. 代码如下: #include <i

HDU 4975 (杭电多校 #10 1005题)A simple Gaussian elimination problem.(网络流之最大流)

题目地址:HDU 4975 对这题简直无语...本来以为这题要用什么更先进的方法,结果还是老方法,这么卡时间真的好吗....比赛的时候用了判环的方法,一直TLE..后来换了矩阵DP的方式,加了加剪枝就过了..无语了.. 代码如下: #include <cstdio> #include <cstring> #include <algorithm> #include <iostream> #include <cstdio> #include <

HDU 4888 (杭电多校#3)Redraw Beautiful Drawings(网络流之最大流)

题目地址:HDU 4888 自己之所以弱真心是态度的问题,以后不能再偷懒了!!那次这个题一直没补,结果这次又遇到了..还有这次遇到的最小割权闭合问题,也一直没刷,所以这次遇到了也不会,连是最小割都不知道!!(突然想起来前面还有好多题拖到现在也没做...T U T)以后绝不能再拖拉了! 这题的建图是很容易的,主要是判断唯一性不好判断.这里是用的dfs找环来判断是否唯一,因为假如有环的话,说明环 中的数字是可以相互流动而且可以保证解依然正确.. 代码如下: #include <cstdio> #i