首页 > 其他分享 >2024CCPC东北四省邀请赛VP

2024CCPC东北四省邀请赛VP

时间:2024-06-09 22:11:30浏览次数:20  
标签:std int cin long VP 四省 2024CCPC 小括号 tie

Problem J. Breakfast

直接根据题意模拟即可:

#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e6+10,mod=1e9+7;
signed main()
{
    std::ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
    double x=32*0.6+20;
    printf("%.2lf",x);
    return 0;
}

ProblemA.PaperWatering

比较考验细心程度吧,观察发现,如果一个数不是平方数,那么取了根号之后再平方的结果与取根号之前的值完全不同,因此只需要判断一下当前的数是否为平方数,是的话加一,不是的话要乘到不能乘为止

#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e6+10,mod=1e9+7;
signed main()
{
    std::ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
    int x,k; cin>>x>>k;
    int cnt=x==1?1:k+1;
    while(x!=1&&k>0){
        int y=sqrt(x);
        cnt++,k--;
        if(y*y==x||y==1){
            x=y;
            continue;
        }
        cnt+=k;
        x=y;
    }
    cout<<cnt;
    return 0;
}

ProblemD.nIMgAME

由于只有1,2,3三种取法,又因为最后的异或值必须为0,那么就可以转化为:所有的数加和为偶数,由此,无论他怎么走,其对手都能破坏当前局面的奇偶性,故其必输

#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e6+10,mod=1e9+7;
void solve(){
    int n; cin>>n;
    cout<<"lose"<<'\n';
}
signed main(){
    std::ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);int t;cin>>t;while(t--)solve();
}

ProblemE.Checksum

考虑到 \(k\) 只有 \(20\) 位,我们可以直接去枚举所有的状态,又由于 \(n\) 的限制,所以我们状态要求不大于 \(n+k\),至此就很显然了

#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e6+10,mod=1e9+7;
void solve(){
    int n,k; cin>>n>>k;
    string A; cin>>A;
    int res=0;
    for(auto c:A){
        if(c=='1') res++;
    }
    for(int i=0;i<(1<<k)&&i<=n+k;i++){
        int cnt=0;
        string s="";
        for(int j=k;j>=1;j--){
            if(i&(1<<(j-1))){
                cnt++,s+="1";
            }
            else s+="0";
        }
        if(cnt+res==i){
            cout<<s<<'\n';
            return;
        }
    }
    cout<<"None"<<'\n';
}
signed main(){
    std::ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);int t;cin>>t;while(t--)solve();
}

ProblemF.Factor

首先考虑一个性质,若一个数是有限循环小数,那么其一定满足这样一个性质,对于一个除到不能再除的分式 \(\frac{a}{b}\) 来说若是一个有限循环小数,将 \(b\) 分解质因数之后必定有 \(2\) 或 \(5\),也就是说,在 \(k\) 进制下,\(b\) 分解质因数之后必须有 \(k\) 分解质因数之中的因子才可以
所以我们可以把给定的 \(k\) 和 \(p\) 分解质因数,其中 \(k\) 分解的多一点,因为我们之后需要用它来组合不同的数,接下来考虑枚举分母 \(q\) ,其一定由上面分解质因数之后的幂次方相乘得到,故枚举所有的小于 \(x\) 的数即可

#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e6+10,mod=1e9+7;
signed main()
{
    std::ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
    int p,x,k; cin>>p>>x>>k;
    unordered_map<int,int>mp;
    auto cacl=[&](int x,int n)->void{
        for(int i=2;i*i<=x;i++){
            while(x%i==0){
                x/=i,mp[i]+=n;
            }
        }
        if(x>1) mp[x]+=n;
    };
    cacl(k,100);
    cacl(p,1);
    vector a(mp.begin(),mp.end());
    function<void(int,int)>dfs;
    int res=0;
    dfs=[&](int i,int n)->void{
        if(i>=a.size()){
            res++;
            return;
        }
        for(int j=0;j<=a[i].second;j++,n*=a[i].first){
            dfs(i+1,n);
            if(n>x/a[i].first) break;            
        }
    };
    dfs(0,1);
    cout<<res;
    return 0;
}

ProblemL.BracketGeneration

观察题意,由于操作二必须需要一个完整的括号,那么我们这里设出()这种括号为小括号,最基本的括号,那么(...)这种即为大括号,通过题意可以知:

  • 小括号一定是由操作一得来
  • 大括号一定是由操作二得来
  • 操作一是有序的,也就是若我们想要的到第 \(i\) 个小括号,那么我们其前面必须要有 \(i-1\) 个小括号才可以
  • 操作二是无序的,能够扩大任意一个小括号

至此,由于操作一的次序是一定的,我们要对每个操作一求出所有操作二的次数,这里拿样例二来举例:
((()())()())(()) 那么我们把所有的小括号进行标记,变成了: \(((11)11)(1)\) 小括号序列为:\(11 11 1\),那么操作二的位置为: \(2,4,5\),对于位置\(5\),我们只有一种选择,就是直接把操作\(5\)位置,对于位置\(4\),我们一开始有: \((4)\) 和 \((45)\) 两种操作,又因为之前对5位置进行了操作,又有:(4(5)) 这一种,故为 \(3\) 种操作,位置2同理,一开始有 \(4\) 种,又因为后面两个位置可以被操作,故为 \(6\) 种,那么总的方案数为:\(1\times3\times6=18\)
进行一遍括号匹配即可:

#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e6+10,mod=998244353;
signed main()
{
    std::ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
    string s; cin>>s;
    vector<int>v;
    int k=0;
    for(int i=0;i<s.size();i++){
        if(s[i]==')'){
            if(s[i-1]=='(') k++;
            else v.push_back(k);
        }
    }
    int res=1;
    reverse(v.begin(),v.end());
    for(int i=0;i<v.size();i++){
        res=(res*(k-v[i]+1+i))%mod;
    }
    cout<<res<<'\n';
    return 0;
}

ProblemI.Password

我们定义 \(dp_i\) 为最后一个排列在位置 \(i\) 结束的方案数,那么 \(dp_n\) 即为答案,可以得到下面的状态转移方程:

\[\text{dp}_i = \sum_{j=1}^{k} \text{dp}_{i-j} \times f_j \]

这里的 \(f_j\) 是指在某个完整排列\(i\)后面接上 \(j\) 个数字并且不会破坏原来性质的方案数,通俗的来讲,其满足以下性质:

  • 对于 \(dp_{i}\) 后面接上 \(j\) 个数,没接之前有: \(a[i-k+1,i]\) 是一个完整排列,接上 \(j\) 之后,满足:\(a[i+j-k+1,i+j]\) 是一个完整排列,这是因为 \(dp_i\) 是最后一个完整排列在 \(i\) 结尾的方案数
  • 对于区间 \(\forall j \in [i-k+2, i+j-k+1)\),均不能满足 \(a[j,j+k-1]\) 是一个完整排列,不然就破坏\(dp_{i+j}\) 的性质,最后一个排列出现的位置不是 \(i+j\) 了

假设我们现在要在长度为 \(5\) 的排列 \({1, 2, 3, 4, 5}\) 后接上 \(j = 3\) 个数字,那么我们一定要满足:

\(b[4, 8] = {4, 5, x, x, x}\),其中\(x\)为某个数字,一定是一个排列,这样最后一个完整排列的结尾才能变成 \(8\)。

同时,\(b[2, 6] = {2, 3, 4, 5, x}\) 与 \(b[3, 7] = {3, 4, 5, x, x}\) 不能是完整的排列,否则前一个完整排列的结尾就不是 \(5\) 而是别的位置了,转移方程就不符合定义。

标签:std,int,cin,long,VP,四省,2024CCPC,小括号,tie
From: https://www.cnblogs.com/o-Sakurajimamai-o/p/18240118

相关文章

  • 简单几步,用Python实现VPN搭建
    保护个人隐私和数据安全变得尤为重要。VPN(虚拟私人网络)是一种有效的解决方案,可以帮助我们在网络上匿名浏览,保护数据传输的安全性。虽然市面上有许多商业VPN服务,但你也可以通过Python自己搭建一个简单的VPN。本文将介绍如何用Python建立自己的VPN。基本原理VPN的工作原理是......
  • 基于AnolisOS 8.6的OpenVPN和GmSSLv2国密算法SSL VPN测试
    测试环境AnolisOS-8.6-x86_64-minimal.isoVirtualBox,2vCPU,4GRAM,40vDisk安装依赖yuminstall-ymakegcc编译安装GmSSLunzipGmSSL-master.zip**注:**由于许多系统有自带的ssl库,为避免潜在的动态库冲突,此处仅生成静态库./config--prefix=/usr/local/gmssl......
  • ARC vp
    ARC165\(\rmPerformance\2691\),\(4\)题。打得比较正常,唯一缺憾是\(\rmE\)不会。A-SumequalsLCM略。B-SlidingWindowSort2略。C-SocialDistanceonGraph把边排序之后直接判断当前是否是二分图,如果不是就寄了,算一下答案即可。D-SubstringComparison......
  • swiftUI使用VideoPlayer和AVPlayer播放视频
    使用VideoPlayer包播放视频:https://github.com/wxxsw/VideoPlayer提供一些可供测试的视频链接,不保证稳定可用哦:https://vfx.mtime.cn/Video/2019/06/15/mp4/190615103827358781.mp4https://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4https://vfx.mtime.cn/Video/2019/......
  • PMSM永磁同步电机滑膜控制SVPWM矢量控制(Simulink仿真实现)
      ......
  • 双馈异步风力发电机DFIG双馈风机SVPWM(Simulink仿真实现)
      ......
  • 2023年中国高校计算机大赛-团队程序设计天梯赛(GPLT)上海理工大学校内选拔赛 (vp + 补题
    比赛主页:https://ac.nowcoder.com/acm/contest/52244AXorBProblem思路:如果i!=j代表(i,j)&(j,i)是两对,也就是说如果i==j代表只有一对,综上得出公式cnt[i]*cnt[i]的累加就是我要的答案Code:#include<bits/stdc++.h>usingnamespacestd;typedeflo......
  • 全面解读OVP过压保护芯片:40V/70V耐压,电流覆盖0.5A至6A
    功能描述:1,PW2605,适用于输出电流1A以下;输入过压关闭保护阈值6.1V,当输入电压超过6.1V,输出为0V,输入6.1V以下时,输出约等于输入,输出电压=输入电压-内阻压差(输入电流x内阻0.35Ω),输入高耐压40V,可以防止输入高压输入损坏后级电路和芯片,平芯微PW2605采用SOT23-3封装......
  • Android 关于MVP、MVC、MVVM原理、使用方法、优缺点以及共同之处与不同之处详细介绍
    Android关于MVP、MVC、MVVM原理、使用方法、优缺点以及共同之处与不同之处详细介绍Android应用程序的设计模式,常见的三种模式是MVP(Model-View-Presenter)、MVC(Model-View-Controller)和MVVM(Model-View-ViewModel)。它们在设计和组织Android应用程序中起着不同的作用,都......
  • CVPR 2024 | 谷歌提出OmniGlue:特征匹配新工作
    前言 第一个以「泛化」能力为核心设计原则的可学习图像匹配器来了!欢迎关注公众号CV技术指南,专注于计算机视觉的技术总结、最新技术跟踪、经典论文解读、CV招聘信息。本文转载自机器之心仅用于学术分享,若侵权请联系删除CV方向的准研究生们,未来三年如何度过?招聘高光谱图像、语......