首页 > 其他分享 >csp提高模拟6

csp提高模拟6

时间:2024-07-23 21:17:38浏览次数:13  
标签:freopen int 提高 long FILE using csp 模拟 define

赛时rank13,T1 100,T2 10,T3 57,T4 0

花间叔祖

原题链接

水题。考虑答案可能为1或2。假设所有的数都可以表示为\(am+1\),那么答案就是1,反之为0。

将差求gcd,若为1,则答案为2,反之为1.

点此查看代码
#include<bits/stdc++.h>
#include<bits/extc++.h>
#define CAI int
#define cai long long
#define CAi cin
#define CaI cout
// using namespace __gnu_pbds;
// using namespace __gnu_cxx;
using namespace std;
#define infile(x) freopen(x,"r",stdin)
#define outfile(x) freopen(x,"w",stdout)
#define errfile(x) freopen(x,"w",stderr)
using ll=long long;using ull=unsigned long long;
#ifdef LOCAL
    FILE *InFile = infile("in.in"),*OutFile = outfile("out.out");
    // FILE *ErrFile=errfile("err.err");
#else
    FILE *Infile = stdin,*OutFile = stdout;
    //FILE *ErrFile = stderr;
#endif
const CAI N = 2e5 + 10;
CAI n,a[N];
signed main(){
    CAi.tie(nullptr)->sync_with_stdio(false);
    CaI.tie(nullptr)->sync_with_stdio(false);
    CAi>>n;
    for(CAI i = 1;i <= n; ++i) CAi>>a[i];
    sort(a+1,a+1+n);
    CAI gcd = 0;
    for(CAI i = 2;i <= n; ++i) gcd = __gcd(gcd,a[i]-a[i-1]);
    if(gcd > 1) CaI<<1;
    else{
        unordered_set<CAI> p;
        for(CAI i = 1;i <= n; ++i) p.insert(a[i]%2);
        CaI<<p.size();
    }
}

合并r

原题链接

设\(f_{i,j}\)表示已经用了\(i\)个数,凑出的和为\(j\)

\[f_{i,j} = f_{i-1,j-1} + f{i,j*2} \]

答案为\(f_{n,k}\)

点此查看代码
#include<bits/stdc++.h>
#include<bits/extc++.h>
// using namespace __gnu_pbds;
// using namespace __gnu_cxx;
using namespace std;
#define infile(x) freopen(x,"r",stdin)
#define outfile(x) freopen(x,"w",stdout)
#define errfile(x) freopen(x,"w",stderr)
using ll=long long;using ull=unsigned long long;
#ifdef LOCAL
    FILE *InFile = infile("in.in"),*OutFile = outfile("out.out");
    // FILE *ErrFile=errfile("err.err");
#else
    FILE *Infile = stdin,*OutFile = stdout;
    //FILE *ErrFile = stderr;
#endif
const int mod = 998244353,N = 5010;
int n,k,f[N][N];
signed main(){
    cin.tie(nullptr)->sync_with_stdio(false);
    cout.tie(nullptr)->sync_with_stdio(false);
    cin>>n>>k;
    if(n == 1) return cout<<1,0;
    f[0][0] = 1;
    for(int i = 1;i <= n; ++i)
        for(int j = i;j >= 1; --j)
            f[i][j] = (f[i-1][j-1] + f[i][j*2]) % mod;
    cout<<f[n][k]<<'\n';
}

回收波特

考虑将所有点的移动转化为原点的移动。发现数据结构无法维护。but值域很小,可以利用这个性质。

我们发现,关于原点对称的两个点的移动一定是对称的。所以可以将两个点并在一起。

就做完了。

点此查看代码
#include<bits/stdc++.h>
#include<bits/extc++.h>
// using namespace __gnu_pbds;
// using namespace __gnu_cxx;
using namespace std;
#define infile(x) freopen(x,"r",stdin)
#define outfile(x) freopen(x,"w",stdout)
#define errfile(x) freopen(x,"w",stderr)
using ll=long long;using ull=unsigned long long;
#ifdef LOCAL
    FILE *InFile = infile("in.in"),*OutFile = outfile("out.out");
    // FILE *ErrFile=errfile("err.err");
#else
    FILE *Infile = stdin,*OutFile = stdout;
    //FILE *ErrFile = stderr;
#endif
const int N = 1e6 + 10;
int n,m,l,r,tag,x[N],stop[N],pos[N];
bitset<N> vis;
struct EDGE{int to,next;}edge[N<<1];
int head[N],cnt;
inline void add(int u,int v){
    edge[++cnt] = {v,head[u]};
    head[u] = cnt;
}
void dfs(int x){
    vis[x] = true;
    for(int i = head[x]; i;i = edge[i].next){
        int y = edge[i].to;
        if(vis[y]) continue;
        if(stop[x]) stop[y] = stop[x];
        else pos[y] = -pos[x];
        dfs(y);
    }
}
signed main(){
    cin.tie(nullptr)->sync_with_stdio(false);
    cout.tie(nullptr)->sync_with_stdio(false);
    cin>>n>>m;
    l = 1,r = N-10;
    for(int i = 1;i <= n; ++i) cin>>x[i];
    for(int i = 1,d;i <= m; ++i){
        cin>>d;
        if(l + tag > 0) tag -= d;
        else tag += d;
        int mid = -tag;
        if(l <= mid && mid <= r){
            stop[mid] = i;
            if(2*mid < l+r){
                for(int j = l;j < mid; ++j) add(mid*2-j,j);
                l = mid + 1;
            }
            else{
                for(int j = r;j > mid; --j) add(mid*2-j,j);
                r = mid-1;
            }
        }
    }
    for(int i = l;i <= r; ++i){
        if(!stop[i]) pos[i] = i + tag;
        dfs(i);
    }
    for(int i = 1;i < l; ++i) if(stop[i]) dfs(i);
    for(int i = N-10;i > r; --i ) if(stop[i]) dfs(i);
    for(int i = 1;i <= n; ++i){
        if(stop[x[i]]) cout<<"Yes "<<stop[x[i]]<<'\n';
        else cout<<"No "<<pos[x[i]]<<'\n';
    }
}

斗篷

神奇题,我不会,跳了。

标签:freopen,int,提高,long,FILE,using,csp,模拟,define
From: https://www.cnblogs.com/hzoi-Cu/p/18319661

相关文章

  • xfs-2024-NOIP模拟赛
    0722模拟赛这是计数专场吗,把我秒掉了。难原:P7050[NWRRC2015]Concatenation给定两个字符串a,b,从a中选一段前缀,b中选一段后缀(前后缀都可以为空),并将选出的后缀拼在选出的前缀后面。你需要求出有多少种本质不同的串(可以为空)。思路总方案数减去不合法的方案数。以ab......
  • 如何提高LoRa抗干扰能力来提升通信质量的几种技术分享
    LoRa(Long Range)技术凭借其远距离传输、低功耗和高抗干扰能力,在物联网(IoT)领域得到了广泛应用。LoRa技术强大的抗干扰能力不仅提高了信号的稳定性和通信距离,还提升了数据的可靠性。然而,面对复杂的无线环境,进一步提高LoRa的抗干扰能力对于确保数据可靠传输至关重要。本篇技术文章将......
  • 夜神模拟器-介绍
    前言全局说明夜神模拟器-介绍一、说明二、官网https://www.yeshen.com三、在线帮助https://support.yeshen.com/zh-CN/四、4.1文件名:4.2文件名:免责声明:本号所涉及内容仅供安全研究与教学使用,如出现其他风险,后果自负。参考、来源:......
  • 干货-并发编程提高——线程状态(二)
    线程:是操作系统调度的最小单元,也叫轻量级进程。它被包含在进程之中,是进程中的实际运作单位。同一进程可以创建多个线程,每个进程都有自己独立的一块内存空间。并且能够访问共享的内存变量。Java线程的状态(区分注意的是操作系统线程的状态还是java的线程状态,两者不能完全划等号):......
  • 基于R语言BIOMOD2 及机器学习方法的物种分布模拟与案例分析
    目录第一章、引入和理论基础第二章、数据获取与预处理第三章、模型的建立与评估第四章、模型优化与多模型集成第五章、结果分析和案例研究BIOMOD2是一个R软件包,用于构建和评估物种分布模型(SDMs)。它集成了多种统计和机器学习方法,如GLM、GAM、SVM等,允许用户预测和分析物......
  • [NOIP2008 提高组] 笨小猴(洛谷题号P1125)
    [NOIP2008提高组]笨小猴题目描述笨小猴的词汇量很小,所以每次做英语选择题的时候都很头疼。但是他找到了一种方法,经试验证明,用这种方法去选择选项的时候选对的几率非常大!这种方法的具体描述如下:假设maxn是单词中出现次数最多的字母的出现次数,minn是单词中出现次数最少的字母的......
  • Day 16 - 模拟赛
    数数题目描述输入格式输出格式\(\text{input1}\)45-893\(\text{output1}\)0173453数据范围cuvelia.zip木积题目描述输入格式输出格式\(\text{input1}\)3567891046999322334665745283937\(\text{output1}\)313样例解释数......
  • 暑假集训CSP提高模拟5
    听好了:7月22日,比样的学长就此陷落。每个陷落的学长都将迎来一场模拟赛,为这些模拟赛带来全新的题面。你所熟知的一切都将改变,你所熟悉的算法都将加诸比样的考验。至此,一锤定音。尘埃,已然落定。#听好了#听好了#听好了啥?你不知道这是什么梗?其实是Arcaea公式说话喜欢......
  • Python随机库:从帕累托分布进行模拟(使用形状和尺度参数)
    根据Python文档,random.paretovariate(alpha)模拟帕累托分布,其中alpha是形状参数。但帕累托分布同时采用形状和尺度参数。如何从指定这两个参数的分布中进行模拟?你说的对,帕累托分布是由形状和尺度参数定义的,而random.paretovariate(alpha)函数只接受形状参数......
  • strlen函数的模拟实现
    strlen函数的作用:统计字符串中'\0'之前的字符个数。法一:通过计数器count实现在自定义函数中,创建一个count变量作为计数器统计字符串中'\0'之前的字符个数,并将count计数器返回给主调函数。具体实现方法如下:每当*pc遇到的字符不是'\0'时,计数器count++,直到遇到'\0'停止计数......