首页 > 其他分享 >2023杭电多校(8)

2023杭电多校(8)

时间:2023-08-10 17:25:19浏览次数:45  
标签:杭电多校 cout Get int cin long 2023 MOD

有点事结果鸽了两场牛客多校,杭电7懒得写题解了(

1005

不难发现无非分三种情况

一种两边都是$1$,一种两边都是$0$,一种一$1$一$0$

于是直接贪心,把所有连续段压成一份,对于最后一种情况很好解决,只有一个方向能走,直接走就好。

对于前两种情况,显然如果先手两个1,取完还能构造一个两个1的情况,后手就输了。如果不是这种情况的话,肯定取那个取完露出尽可能少的0的情况。

贪心做下去即可。

#include <bits/stdc++.h>

#define LL long long
#define ULL unsigned long long
#define x first
#define y second

using namespace std;

typedef pair<int, int> PII;
typedef pair<LL, LL> PLL;

const int INF = 0x3f3f3f3f;

void solve()
{
    int n;
    string s;
    cin >> n >> s;

    vector<PII> v;
    int cnt = 0;
    int num = 1;
    int now = s[0] - '0';

    if (n == 1)
    {
        if (s[0] == '0')
        {
            cout << "-1" << endl;
        }
        else
        {
            cout << "1" << endl;
        }
        return;
    }
    for (int i = 1; i < n; i++)
    {
        int x = s[i] - '0';
        if (x == now)
        {
            num++;
        }
        else
        {
            PII p1(now, num);
            v.push_back(p1);
            now = x;
            num = 1;
        }
        if (i == n - 1)
        {
            PII p1(now, num);
            v.push_back(p1);
        }
    }

    // for (int i = 0; i < v.size(); i++)
    // cout << v[i][0] << ' ' << v[i][1] << endl;

    int ans = -2;
    int c = 0;
    for (int l = 0, r = v.size() - 1;; c ^= 1)
    {
        // cerr << l << "  " << r << "   " << c << endl;
        if (l == r)
        {
            if (v[l].x != c)
            {
                ans = c ^ 1;
                break;
            }
            else if (v[l].x == c && v[l].y == 1)
            {
                ans = -1;
                break;
            }
            else
            {
                ans = c;
                break;
            }
        }

        if (c != v[l].x && c != v[r].x)
        {
            ans = c ^ 1;
            break;
        }
        else if (c == v[l].x && c != v[r].x)
        {
            if (v[l].y == 1)
            {
                l++;
                continue;
            }

            v[l].y--;
        }
        else if (c != v[l].x && c == v[r].x)
        {
            if (v[r].y == 1)
            {
                r--;
                continue;
            }
            v[r].y--;
        }
        else
        {
            if (v[l].y != 1 || v[r].y != 1)
            {
                ans = c;
                break;
            }
            else
            {
                if (v[l + 1].y > v[r - 1].y)
                    r--;
                else
                    l++;
            }
        }
    }

    cout << ans << endl;
}

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0), cout.tie(0);

    int t;
    cin >> t;
    while (t--)
    {
        solve();
    }

    return 0;
}

1007

并查集即可

#include <bits/stdc++.h>
using namespace std;
const int mx = 1e5+10;
int fa[mx];
int Get(int x){
    if (x == fa[x]) return x;
    else return fa[x] = Get(fa[x]);
}
void Solve(){
    int N,M;
    cin >> N >> M;
    for (int i = 1 ; i <= N ; i ++){
        fa[i] = i;
    }
    for (int i = 1 ; i <= M ; i ++){
        int u,v;
        cin >> u >> v;
        int fx = Get(u),fy = Get(v);
        fa[fx] = fy;
    }
    int T,t;
    cin >> T >> t;
    bool flag = false;
    for (int i = 1 ; i < T ; i ++){
        int x;
        cin >> x;
        if (Get(x)!=Get(t)){
            flag = true;
        }
    }
    if (!flag) cout << "YES\n";
    else cout << "NO\n";
}
int main(){
    std::ios::sync_with_stdio(false);
    int T;
    cin >> T;
    while (T--){
        Solve();
    }
    return 0;
}

1008

题目是求$0~p$随机的n阶矩阵的秩的期望

我们考虑一行一行的构造这个东西

$f_{i,j}$表示考虑到第$i$行,秩为$j$的概率

那么我们就需要考虑当前和前面的是否线性相关

转移就是

$f[i][j] = f[i-1][j] * \frac{p^j}{p^n} + (1-\frac{p^{j-1}}{p^n}) * f[i-1][j-1]$

注意全$0$阵的特判

#include <bits/stdc++.h>
#define int long long
using namespace std;
const int mx = 5015;
const int MOD = 1e9+7;
int pw[mx];
int f[5005][5005];
int Pow(int x,int y){
    int ans = 1;
    for (;y;){
        if (y & 1) ans = 1ll * ans * x %MOD;
        x = 1ll * x * x % MOD;
        y >>=1;
    }
    return ans;
}
signed main(){
    int T;
    cin >> T;
    while (T--){
        int N,P;
        cin >> N >> P;
        int n = Pow(P,N);
        int invN = Pow(n,MOD-2);
        f[1][0] = invN;
        f[1][1] = (1-invN+MOD)%MOD;
        //cout << f[1][0] << " " << f[1][1] << endl; 
        pw[0] = 1;
        for (int i = 1 ; i <= N ; i ++){
            pw[i] = pw[i-1] * P % MOD;
        }
        for (int i = 2 ; i <= N ; i ++){
            f[i][0] = f[i-1][0] * invN%MOD;
            for (int j = 1 ; j <= i ; j ++){
                f[i][j] = (1ll * (f[i-1][j] * pw[j] % MOD * invN %MOD)%MOD + 1ll * f[i-1][j-1] * (1ll-(pw[j-1]*invN)%MOD+MOD)%MOD)%MOD;
            }
        }
        int ans = 0;
        for (int i = 1 ; i <= N ; i ++){
            ans = (ans + f[N][i] * i%MOD)%MOD;
        }
        cout << ans%MOD << endl;
    }
    return 0;    
}

1010

打表不难发现答案只有1,2,3三种

1很好判断

2考虑:

假设当前距离为$t$,第一次加的数字为$x^2$,第二次为$y^2$

一定有

$t = x^2 + y^2$

或者

$t = x^2 - y^2$

前者需要满足$x^2$和$y^2$都小于$t$

后者的话,$t = (x+y)(x-y)$,$\sqrt{t}$的枚举一下因数算即可。

#include <bits/stdc++.h>
using namespace std;
int main(){
    int T;
    cin >> T;
    while (T--){
        int a,b;
        cin >> a >> b;
        int T = abs(a-b);
        int y = sqrt(T);
        if (1ll*y * y == T){
            cout << 1 << '\n';
            continue;
        }
        bool flag = false;
        for (int i = 1 ; i <= sqrt(T) ; i++){
            int ttt = T - i * i;
            int yy = sqrt(ttt);
            if (yy * yy == ttt){
                flag = true;
                break;
            }
            if (T%i == 0){
                int xx = i,yy = T/i;
                if ((xx + yy) %2 != 0) continue;
                int t = (xx + yy)/2;
                int tt = abs(xx - yy) /2;
                if (t < tt) swap(t,tt);
                if (t * t - tt * tt == T || tt * tt - t * t == T) {
                    flag = true;
                    break;
                }
            }
        }
        if (flag) cout << 2 <<'\n';
        else cout << 3 << '\n';
    }
    return 0;
} 

$04$感觉是个很典的线性基求$k$大子集异或和,然后二分一下就行。但是$2^{250}$好麻烦,写了个$bitset$+手写加减比较,没写完(

标签:杭电多校,cout,Get,int,cin,long,2023,MOD
From: https://www.cnblogs.com/si--nian/p/17620936.html

相关文章

  • 中睿天下入选河南省网信系统2023年度网络安全技术支撑单位
    近日,河南省委网信办发布了“河南省网信系统2023年度网络安全技术支撑单位名单”,中睿天下凭借出色的网络安全技术能力和优势成功入选。本次遴选由河南省委网信办会同国家计算机网络与信息安全管理中心河南分中心(以下简称安全中心河南分中心)组织开展,根据《中华人民共和国网络安全法》......
  • 【专题】2023全民学习力洞察与数字营销指南报告PDF合集分享(附原数据表)
    原文链接:https://tecdat.cn/?p=33404原文出处:拓端数据部落公众号学习能力是将知识资源转化为知识资本的能力。它包括对所学内容的兴趣和热情,有助于更深入理解和掌握知识,提高个人的认知和思维能力。阅读原文,获取专题报告合集全文,解锁文末158份学习教育行业相关报告。教育和娱乐......
  • 2023.8.10-格律诗乐器的生产流程和质量控制流程
    应王建民老师的要求,要求观看王志文主演的电视剧《天道》,重点观看格律诗乐器的生产流程,如何控制质量,对于格律诗乐器的生产流程和质量控制流程有以下总结和感想。格律诗乐器的生产流程:主要为王庙村扶贫、农户式生产、半成品,购买乐圣等公司的配件,在北京进行组装等。在王庙村进行扶......
  • PantTool SAI(绘图软件) v2023.04.05 中文永久使用
    PantToolSAI是一款流行的绘图软件,专为数字艺术家和插画师设计。它提供了丰富的绘画工具和功能,使用户能够轻松地创作出精美的插图、漫画和动画作品。点击获取PantToolSAI 以下是PantToolSAI的主要特点和功能:简单直观的界面:PantToolSAI采用简洁、直观的界面设计,使用户可......
  • 第五期(2022-2023)传统行业云原生技术落地调研报告——央国企篇
     随着国务院国资委印发《关于加快推进国有企业数字化转型工作的通知》,开启了国有企业数字化转型的新篇章。大型央、国企纷纷顺应趋势,加速云化布局,将数字化转型工作定位为“十四五”时期重点任务。同时,越来越多的企业通过云原生技术推动IT变革,驱动业务创新发展,促进企业自身以及......
  • 2023年十款开源测试开发工具推荐(自动化、性能、造数据、流量复制)
    ​1、AutoMeter-API自动化测试平台AutoMeter是一款针对分布式服务,微服务API做功能和性能一体化的自动化测试平台,一站式提供发布单元,API,环境,用例,前置条件,场景,计划,报告等管理在项目开发,迭代交付过程中开发人员,测试人员需要针对系统提供的API做调试,回归测试,性能测试。自动......
  • 【2023-08-09】仁者爱人
    20:00说别人错很容易,但重要的是自己怎么做才是对的。                                                 ——汪成为今天想东西时,忽然想到了连叔说过的一个本质现象:“市......
  • 全方位对比 Postgres 和 MySQL(2023 版)
    根据2023年的StackOverflow调研(https://survey.stackoverflow.co/2023/),Postgres已经取代MySQL成为最受敬仰和渴望(themostadmired,desired)的数据库。  随着Postgres的发展势头愈发强劲,在Postgres和MySQL之间做选择变得更难了。 如果看安装数量......
  • 2023 Gartner RPA魔力象限报告解读:象限跃升彰显国产RPA厂商实力
    2023GartnerRPA魔力象限报告解读:象限跃升彰显国产RPA厂商实力2023GartnerRPA魔力象限报告四大行业趋势,国产RPA厂商已在践行文/王吉伟8月3日,全球著名咨询调查机构Gartner发布了《2023年全球RPA魔力象限(GartnerRPAMQ)》报告。报告从执行能力和企业战略两大维度对全球RPA厂商进行......
  • 2023-2029全球阻燃反光带行业调研及趋势分析报告
     2022年全球阻燃反光带市场规模约亿元,2018-2022年年复合增长率CAGR约为%,预计未来将持续保持平稳增长的态势,到2029年市场规模将接近亿元,未来六年CAGR为%。从核心市场看,中国阻燃反光带市场占据全球约%的市场份额,为全球最主要的消费市场之一,且增速高于全球。2022年市场规模约亿......