首页 > 其他分享 >2023杭电多校4

2023杭电多校4

时间:2024-10-16 22:22:37浏览次数:3  
标签:杭电多校 arr return cout int 2023 ans include

2023杭电多校4

C - Simple Set Problem

题目描述:

一共T组输入,每组输入有K个集合,从K个集合中选取K个数,也就是每个集合选取一个数,问这些数字中的最大值减去这些数字中的最小值的最小的值。

解题思路:

利用双指针,对于每一个右端点,存一段至少包含所有集合的点各一个的区间,然后就可以用区间极差来算整体的极差。这道题目非常恶心,非常卡时间,需要用快读和快写来优化一下,另外记得提交到GCC的编译器。

#include <iostream>
#include <vector>
#include <array>
#include <set>
#include <algorithm>
#include <climits>
#include <iostream>
#include <cstdio>
using namespace std;
#define endl '\n'
inline int read()
{
    int x = 0, f = 1;
    char ch = getchar();
    while (ch < '0' || ch > '9')
    {
        if (ch == '-')
            f = -1;
        ch = getchar();
    }
    while (ch >= '0' && ch <= '9')
        x = x * 10 + ch - '0', ch = getchar();
    return x * f;
}
void write(int x)
{
    if (x < 0)
        putchar('-'), x = -x;
    if (x > 9)
        write(x / 10);
    putchar(x % 10 + '0');
    return;
}
void solved()
{
    int n = read();
    vector<array<int, 2>> arr;
    int ans = 2e9;
    for (int i = 1; i <= n; i++)
    {
        int k = read();
        while (k--)
        {
            int v = read();
            arr.push_back({v,i});
        }
    }
    sort(arr.begin(), arr.end());
    vector<int> vis(n + 1, 0);
    int nums = 0;
    int j = 0;
    for (int i = 0; i < arr.size(); i++)
    {
        array<int, 2> now = arr[i];
        if (!vis[now[1]]++)
        {
            ++nums;
        }
        if (nums == n)
        {
            while (vis[arr[j][1]] > 1)
            {
                --vis[arr[j++][1]];
            }
            ans = min(ans, (arr[i][0] - arr[j][0]));
        }
    }
    write(ans);
    printf("\n");
}
int main()
{
    int T = read();
    while (T--)
    {
        solved();
    }
    return 0;
}

G - Guess

题目描述:

给定两个式子,一个是U(x),如果x有平方因子,那么他就是0,如果他有k个质因子,那么他就是(-1)^k,要求我们计算一个S(n)=∑d|nμ(nd)ln(d)。

解题思路:

这是一道打表找规律的题目,并且需要一点板子。首先从打表中找出规律,如果输入的数是一个质数的k次,那么答案就是这个质数,其中k大于等于1,如果这个数是1的话当然就是1。那么快速判断一个超级大的数字是否为质数呢,我们就需要套一个板子的代码,这就是米勒-拉宾素性检验(MillerRabbin)算法,然后如果这个数不是质数,因为他最大是1e18,我们无法预处理出这么多的质数,至少要下降到1e6,所以要先判断一下开根号的结果是不是满足题意。

#include <iostream>
#include <vector>
#include <cmath>
using namespace std;
#define int long long
#define endl '\n'
#define close ios::sync_with_stdio(false), cin.tie(0), cout.tie(0)
const int N = 1e6 + 10;
const int mod = 998244353;
int isPrime[N];
vector<int> prime;

int Quick_Multiply(int a, int b, int c)
{
    long long ans = 0, res = a;
    while (b)
    {
        if (b & 1)
            ans = (ans + res) % c;
        res = (res + res) % c;
        b >>= 1;
    }
    return (int)ans;
}

int Quick_Power(int a, int b, int c)
{
    int ans = 1, res = a;
    while (b)
    {
        if (b & 1)
            ans = Quick_Multiply(ans, res, c);
        res = Quick_Multiply(res, res, c);
        b >>= 1;
    }
    return ans;
}

bool Miller_Rabin(int x)
{
    if (x == 2)
        return true;
    if (x < 2 || !(x & 1))
        return false;

    int s = 0, t = x - 1;
    while (!(t & 1))
    {
        s++;
        t >>= 1;
    }

    for (int i = 0; i < 10 && prime[i] < x; ++i)
    {
        int a = prime[i];
        int b = Quick_Power(a, t, x);
        for (int j = 1; j <= s; ++j)
        {
            int k = Quick_Multiply(b, b, x);
            if (k == 1 && b != 1 && b != x - 1)
                return false;
            b = k;
        }
        if (b != 1)
            return false;
    }
    return true;
}

void sieve()
{
    for (int i = 2; i < N; i++)
    {
        isPrime[i] = 1;
    }
    for (int i = 2; i < N; i++)
    {
        if (isPrime[i])
        {
            prime.push_back(i);
        }
        for (int &it : prime)
        {
            if (i * it >= N)
            {
                break;
            }
            isPrime[i * it] = 0;
            if (i % it == 0)
            {
                break;
            }
        }
    }
}

bool isPerfectSquare(int v)
{
    int k = sqrt(v);
    return (k * k == v);
}

signed main()
{
    close;
    int T;
    cin >> T;
    sieve();

    for (int i = 1; i <= T; i++)
    {
        if (i > 1)
        {
            cout << " ";
        }
        int v;
        cin >> v;
        if (Miller_Rabin(v) || v == 1)
        {
            cout << v % mod;
            continue;
        }
        if (isPerfectSquare(v) && Miller_Rabin((int)sqrt(v)))
        {
            cout << (int)sqrt(v) % mod;
            continue;
        }

        int flag = 0;
        int originalV = v;
        for (auto j : prime)
        {
            if (j * j > v)
                break;
            while (v % j == 0)
            {
                v /= j;
            }
            if (v == 1)
            {
                cout << j % mod;
                flag = 1;
                break;
            }
            v = originalV;
        }
        if (!flag)
        {
            cout << 1;
        }
    }
    cout << endl;
}

J - Kong Ming Qi

HDU - 7321

题目描述:

一个(n+2)(m+2)的棋盘上有(n)*(m)个棋子,棋子可以跳跃另外一个棋子,当且仅当他们相邻,且该棋子跳跃到的地方没有棋子,问最后棋盘上最少有几颗棋子。

解题思路:

这题需要模拟很多种情况,模拟完就做出来了。

#include <iostream>
#include <vector>
#include <cmath>
using namespace std;
#define int long long
#define endl '\n'
#define close ios::sync_with_stdio(false), cin.tie(0), cout.tie(0)
signed main()
{
    close;
    int T;
    cin >> T;
    for (int i = 1; i <= T; i++)
    {
        int n, m;
        cin >> n >> m;
        if (n == 1 || m == 1)
        {
            int k = max(n, m);
            cout << k - k / 2 << endl;
            continue;
        }
        if (n % 3 == 0 || m % 3 == 0)
        {
            cout << 2 << endl;
            continue;
        }
        cout << 1 << endl;
    }
}

L - a-b Problem

HDU - 7323

题目描述:

有T组输入,每组输入有n个对,每个值由a和b组成,A要最大化A,B要最大化B,问最后SUMA-SUMB的值是多少。

解题思路:

直接求一个a+b,然后对他进行排序,从高到低拿即可。

#include <iostream>
#include <vector>
#include <cmath>
#include <algorithm>
using namespace std;
#define int long long
#define endl '\n'
#define close ios::sync_with_stdio(false), cin.tie(0), cout.tie(0)
const int N = 1e5 + 10;
struct ss
{
    int sum;
    int a;
    int b;
};
ss input[N];
signed main()
{
    close;
    int T;
    cin >> T;
    for (int i = 1; i <= T; i++)
    {
        int n;
        cin >> n;
        for (int j = 1; j <= n; j++)
        {
            cin >> input[j].a >> input[j].b;
            input[j].sum = input[j].a + input[j].b;
        }
        sort(input + 1, input + 1 + n, [&](const ss &left, const ss &right)
             { return left.sum > right.sum; });
        int sumA = 0;
        int sumB = 0;
        for (int j = 1; j <= n; j++)
        {
            if (j & 1)
            {
                sumA += input[j].a;
            }
            else
            {
                sumB += input[j].b;
            }
        }
        cout << sumA - sumB << endl;
    }
}

标签:杭电多校,arr,return,cout,int,2023,ans,include
From: https://blog.csdn.net/2301_80930906/article/details/142799914

相关文章

  • TuxeraNTFS2023破解版软件dmg安装包(苹果系统读写win分区软件)
    ......
  • 2023年 10月自考《软件开发工具》03173试题
    目录一.单选题二.填空题三.简答题四.应用题一.单选题1.软件对可维护性、可重用性的要求越来越高,这是因为A.客观世界的复杂性B.软件的多样性C.客观世界的动态性D.软件的规模性2.时序网络用户描述 P58页A.数据内容B.程序执行的逻辑过程C.数据结果D.系统状态及......
  • 「CEOI2023」Balance
    感觉这种题天克我啊。。题目给出了\(S=2^k\)的限制,让我们有一些奇怪的思考,再加上有\(S=2\)的部分分,我们可以考虑从\(S=2\)拓展到任意情况。故我们先研究\(S=2\)的情况。我们对颜色建点,对于每一行的两种颜色之间连一条边。然后我们考虑钦定每一条边的方向以表示这一行的......
  • ICPC WF 2022 2023 Bridging the Gap 过桥
    https://qoj.ac/problem/8683https://loj.ac/p/6937是个十足的DP题。刷完了YeahPotato的DP博客,你觉得有什么方法能套进来呢?前面“基于特殊结构的技巧”没有一个能用。如何分析性质?分析样例:1238996991088345明显先排序。3456888999910猜想......
  • 国家人工智能创新应用先导区数据及城市人工智能先导区准自然实验数据(2006-2023年)
    一、测算方式:参考C刊《当代财经》冯婉昕(2024)老师的做法,本文的核心解释变量为国家人工智能创新应用先导区政策(AI)。企业的金融资产配置是企业生产经营的内生变量,因此,如果选择企业层面的指标来度量企业人工智能应用情况,会面临较大的内生性问题,从而无法识别人工智能应用与金融资产......
  • 【bayes-Transformer多维时序预测】bayes-Transformer多变量时间序列预测,基于bayes-Tr
    %% 划分训练集和测试集P_train=res(1:num_train_s,1:f_)';T_train=res(1:num_train_s,f_+1:end)';P_test=res(num_train_s+1:end,1:f_)';T_test=res(num_train_s+1:end,f_+1:end)';%% 划分训练集和测试集M=size(P_train,2);N=siz......
  • 【题解】[2023 合肥蜀山初中] 旅行(travel)
    题目传送门题目大意有一个\(n\)个点\(m\)条边的有向图组成的城市,每条边可以是骑行边或公共交通边,公共交通边只能走一条,边是从\(u_i\)到\(v_i\)的有向边,需要花费\(time_i\)的时间,求\(1\)到其他点的最短路径。思路分析有一个很巧妙的思路叫分层图,它的思路是因为只能......
  • 读书笔记《稀缺-我们是如何陷入贫穷与忙碌的》2023-6-21
    读书笔记《稀缺-我们是如何陷入贫穷与忙碌的》2023-6-21基本信息书名:《稀缺-我们是如何陷入贫穷与忙碌的》作者:[美]塞德希尔·穆来纳森(SendhilMullainathan)[美]埃尔德·莎菲尔(EldarShafir)​​​​译者:魏薇龙志勇出版社:浙江教育出版社.湛庐出版时间:2022年10月......
  • 会声会影2023永久激活旗舰版免费下载v26.2.0.311免费中文版(附Crack补丁)
    软件介绍会声会影2023永久激活版是一款刚刚最新推出的多功能视频剪辑软件,这款软件不仅完美继承了之前多个版本当中的强大功能。而且我们还可以通过会声会影2023永久激活版来体验到标题动态选项、标题特效等多个全新的功能,让你可以更加快速地进行视频编辑。会声会影2023永久激......
  • YOLOv11改进策略【卷积层】| ICCV-2023 SAFM 空间自适应特征调制模块 对C3k2进行二次
    一、本文介绍本文记录的是利用空间自适应特征调制模块SAFM优化YOLOv11的目标检测方法研究。SAFM通过更好地利用特征信息来实现模型性能和效率的平衡。本文通过二次创新C3k2,能够动态选择代表性特征,并结合局部上下文信息,提升模型的检测精度。专栏目录:YOLOv11改进目录一览......