首页 > 其他分享 >『模拟赛』暑假集训CSP提高模拟12

『模拟赛』暑假集训CSP提高模拟12

时间:2024-07-31 18:28:15浏览次数:15  
标签:ch int qr 12 lx ans CSP 模拟 fo

Rank

正常偏下发挥吧。

image

A. 黑客

签到题。

题目中的关键点是只有 \(x\) 和 \(y\) 的和在区间 \(\left[0,999\right]\) 内才合法,因此我们只枚举和在这个范围内的两个值,寻找约分前的值即可,复杂度为 \(\mathcal{O(999^2)}\)。

点击查看代码
#include<bits/stdc++.h>
#define fo(x,y,z) for(register int (x)=(y);(x)<=(z);(x)++)
#define fu(x,y,z) for(register int (x)=(y);(x)>=(z);(x)--)
using namespace std;
typedef long long ll;
#define lx ll
inline lx qr()
{
	char ch=getchar();lx x=0,f=1;
	for(;ch<'0'||ch>'9';ch=getchar())if(ch=='-')f=-1;
	for(;ch>='0'&&ch<='9';ch=getchar())x=(x<<3)+(x<<1)+(ch^48);
	return x*f;
}
#undef lx
#define qr qr()
const int Ratio=0;
const int N=1e6+5;
const int mod=1e9+7;
ll A,B,C,D,ans;
namespace Wisadel
{
    short main()
    {
        // freopen(".in","r",stdin),freopen(".out","w",stdout);
        // // cin.tie(0),cout.tie(0);
        // ios::sync_with_stdio(0);
        A=qr,B=qr,C=qr,D=qr;
        fo(i,1,999)
            fo(j,1,999-i)
                if(__gcd(i,j)==1)
                {
                    ll l1=ceil(1.0*A/i),r1=B/i,l2=ceil(1.0*C/j),r2=D/j;
                    ll t=min(r1,r2)-max(l1,l2)+1;
                    if(t>0) ans=(ans+t%mod*(i+j)%mod+mod)%mod;
                }
        printf("%lld\n",ans);
        return Ratio;
    }
}
int main(){return Wisadel::main();}

B. 密码技术

原[ARC107C] Shuffle Permutation

也是很水的题,赛时的想法很接近正解了,但就差一点。

若第 \(i\) 行和第 \(j\) 行均可与第 \(k\) 行交换,那么第 \(i\) 行也可与第 \(j\) 行交换。知道了这一点,大概就能猜出来这单独的一组的方案数为组容量的阶乘。

还有一个性质就是,行与行之间的交换不会影响列之间的交换,所以依据乘法原理,答案为二者相乘。

因此我们行列分开找,每次利用并查集找到分组情况,然后得阶乘的积即可。

点击查看代码
#include<bits/stdc++.h>
#define fo(x,y,z) for(register int (x)=(y);(x)<=(z);(x)++)
#define fu(x,y,z) for(register int (x)=(y);(x)>=(z);(x)--)
using namespace std;
typedef long long ll;
#define lx ll
inline lx qr()
{
	char ch=getchar();lx x=0,f=1;
	for(;ch<'0'||ch>'9';ch=getchar())if(ch=='-')f=-1;
	for(;ch>='0'&&ch<='9';ch=getchar())x=(x<<3)+(x<<1)+(ch^48);
	return x*f;
}
#undef lx
#define qr qr()
const int Ratio=0;
const int N=1e5+5;
const int mod=998244353;
int n,k;
int a[55][55],fx[55],siz[55];
ll ans=1,jc[N];
namespace Wisadel
{
    int Wfind(int x)
    {
        if(x!=fx[x]) return fx[x]=Wfind(fx[x]);
        return x;
    }
    short main()
    {
        // freopen(".in","r",stdin),freopen(".out","w",stdout);
        n=qr,k=qr;
        memset(a,0x7f,sizeof a);
        fo(i,1,n) fo(j,1,n) a[i][j]=qr;
        jc[1]=1;
        fo(i,2,n) jc[i]=jc[i-1]*i%mod;
        fo(i,1,n) fx[i]=i;
        fo(i,1,n)
            fo(j,i+1,n)
            {
                bool can=1;
                fo(o,1,n) if(a[i][o]+a[j][o]>k) {can=0;break;}
                if(!can) continue;
                int _1=Wfind(i),_2=Wfind(j);
                fx[_1]=_2;
            }
        fo(i,1,n) siz[Wfind(i)]++;
        fo(i,1,n) if(siz[i]) ans=ans*jc[siz[i]]%mod;
        memset(siz,0,sizeof siz);
        fo(i,1,n) fx[i]=i;
        fo(i,1,n)
            fo(j,i+1,n)
            {
                bool can=1;
                fo(o,1,n) if(a[o][i]+a[o][j]>k) {can=0;break;}
                if(!can) continue;
                int _1=Wfind(i),_2=Wfind(j);
                fx[_1]=_2;
            }
        fo(i,1,n) siz[Wfind(i)]++;
        fo(i,1,n) if(siz[i]) ans=ans*jc[siz[i]]%mod;
        printf("%lld\n",ans);
        return Ratio;
    }
}
int main(){return Wisadel::main();}

C. 修水管

原[HNOI2015] 亚瑟王

题面爆改计划,膜拜 HDK 光速找到原题。

期望的题,挺恶心的,挂一篇我觉得很好的题解润了。

点击查看代码
#include<bits/stdc++.h>
#define fo(x,y,z) for(register int (x)=(y);(x)<=(z);(x)++)
#define fu(x,y,z) for(register int (x)=(y);(x)>=(z);(x)--)
using namespace std;
typedef long long ll;
#define lx ll
inline lx qr()
{
	char ch=getchar();lx x=0,f=1;
	for(;ch<'0'||ch>'9';ch=getchar())if(ch=='-')f=-1;
	for(;ch>='0'&&ch<='9';ch=getchar())x=(x<<3)+(x<<1)+(ch^48);
	return x*f;
}
#undef lx
#define qr qr()
const int Ratio=0;
const int N=255;
const int mod=998244353;
int n,r,d[N];
double p[N],fp[N],pf[N][N],f[N][N];
namespace Wisadel
{
    short main()
    {
        // freopen(".in","r",stdin),freopen(".out","w",stdout);
        int T=qr;
        while(T--)
        {
            n=qr,r=qr;
            fo(i,0,n-1) cin>>p[i],d[i]=qr;
            fo(i,0,n-1)
            {
                pf[i][0]=1;
                fo(j,1,r) pf[i][j]=pf[i][j-1]*(1-p[i]);
            }
            memset(f,0,sizeof f),memset(fp,0,sizeof fp);
            f[0][0]=pf[0][r];
            f[0][1]=fp[0]=1-f[0][0];
            fo(i,1,n-1) fo(j,0,r)
            {
                fp[i]+=f[i-1][j]*(1-pf[i][r-j]);
                f[i][j]+=f[i-1][j]*pf[i][r-j];
                if(j) f[i][j]+=f[i-1][j-1]*(1-pf[i][r-j+1]);
            }
            double ans=0;
            fo(i,0,n-1) ans+=d[i]*fp[i];
            printf("%.10lf\n",ans);
        }
        return Ratio;
    }
}
int main(){return Wisadel::main();}

D. 货物搬运

原[CF455D] Serega and Fun

一眼平衡树,但赛时看 T3 看麻了只打了暴力。

果然最后还是分块+双端队列碾过去了。

没啥好说的,分块就是暴力,一看就懂。

点击查看代码
#include<bits/stdc++.h>
#define fo(x,y,z) for(register int (x)=(y);(x)<=(z);(x)++)
#define fu(x,y,z) for(register int (x)=(y);(x)>=(z);(x)--)
using namespace std;
typedef long long ll;
#define lx ll
inline lx qr()
{
	char ch=getchar();lx x=0,f=1;
	for(;ch<'0'||ch>'9';ch=getchar())if(ch=='-')f=-1;
	for(;ch>='0'&&ch<='9';ch=getchar())x=(x<<3)+(x<<1)+(ch^48);
	return x*f;
}
#undef lx
#define qr qr()
const int Ratio=0;
const int N=1e5+5;
const int mod=998244353;
int n,q,m,sq,ans;
int c[355][N];
deque<int> dq[N];
namespace Wisadel
{
    void Wget(int &x){x=(x+ans-1)%n+1;}
    short main()
    {
        // freopen(".in","r",stdin),freopen(".out","w",stdout);
        n=qr;sq=sqrt(n);m=n/sq+1;int x;
        fo(i,0,n-1) x=qr,dq[i/sq].push_back(x),c[i/sq][x]++;
        q=qr;
        while(q--)
        {
            int op=qr,l=qr,r=qr;
            Wget(l),Wget(r);
            if(l>r) swap(l,r);
            l--;
            int lbl=l/sq,rbl=r/sq;
            if(op==1)
            {
                if(lbl==rbl)
                {
                    r=r%sq-1,x=dq[rbl][r];
                    dq[rbl].erase(dq[rbl].begin()+r);
                    dq[lbl].insert(dq[lbl].begin()+l%sq,x);
                }
                else
                {
                    for(int i=lbl;i<rbl;)
                    {
                        x=dq[i].back(),dq[i].pop_back(),c[i][x]--,i++;
                        dq[i].push_front(x),c[i][x]++;
                    }
                    r%=sq,x=dq[rbl][r];
                    dq[rbl].erase(dq[rbl].begin()+r),c[rbl][x]--;
                    dq[lbl].insert(dq[lbl].begin()+l%sq,x),c[lbl][x]++;
                }
            }
            else
            {
                int k=qr;Wget(k);ans=0;
                if(lbl==rbl)
                    fo(i,l%sq,r%sq-1) ans+=dq[lbl][i]==k;
                else
                {
                    fo(i,lbl+1,rbl-1) ans+=c[i][k];
                    fo(i,l%sq,dq[lbl].size()-1) ans+=dq[lbl][i]==k;
                    fo(i,0,r%sq-1) ans+=dq[rbl][i]==k;
                }
                printf("%d\n",ans);
            }
        }
        return Ratio;
    }
}
int main(){return Wisadel::main();}

计数题+期望题,最ex的数学知识全弄到一场了。

发挥感觉一般,还没到挂很多分的地步,得加把劲。

点击查看HDK


完结撒花~

标签:ch,int,qr,12,lx,ans,CSP,模拟,fo
From: https://www.cnblogs.com/Ratio-Yinyue1007/p/18335202

相关文章

  • 【C++BFS算法 二分查找】2812. 找出最安全路径
    本文涉及知识点C++BFS算法C++二分查找LeetCode2812.找出最安全路径给你一个下标从0开始、大小为nxn的二维矩阵grid,其中(r,c)表示:如果grid[r][c]=1,则表示一个存在小偷的单元格如果grid[r][c]=0,则表示一个空单元格你最开始位于单元格(0,0)。在......
  • 暑假集训CSP提高模拟12
    暑假集训CSP提高模拟12\(T1\)P171.黑客\(40pts\)将式子进行二维差分。考虑枚举\(\frac{i+j}{\gcd(i,j)}=t\),并统计它能对答案产生的贡献。令\(\gcd(i,j)=1\),这样的话才会不重不漏。推式子,有\(\begin{aligned}&\sum\limits_{i=1}^{n}\sum\limits_{j=1}^{m}[\fr......
  • 暑假集训CSP提高模拟 ∫[0,6] (x^2)/6 dx
    \[\text{暑假集训CSP提高模拟}\int^{6}_{0}\frac{x^{2}}{6}dx\]A.黑客显然这个题里只有\(999\)放在复杂度里是有可能对的,要么是\(999^{2}\)要么是\(999^{2}\log999\),显然应该是前者.考虑枚举全部的最简分数,然后乘上去,算的时候直接算当前分母/分子是最简分式的几倍(注意上......
  • 暑假集训csp提高模拟12
    赛时rank47,T1100,T20,T30,T420做题策略不好,没做T2,死在T4上了。感觉赛时就是唐。T1黑客考虑枚举结果,如果存在贡献,那么一定有\(i+j=k\&gcd(i,j)=1\),统计一下有多少组即可点此查看代码#include<bits/stdc++.h>#include<bits/extc++.h>//usingnamespace__gnu_pbds;......
  • 洛谷题单指南-前缀和差分与离散化-P1083 [NOIP2012 提高组] 借教室
    原题链接:https://www.luogu.com.cn/problem/P1083题意解读:已知第i天有r[i]个教室可以供租借,有m个租借教室的订单,第i订单需要在第s[i]~t[i]天区间内租借d[i]个教室,计算是否全部订单都能满足,如果不满足要输出从第几个订单开始不满足。解题思路:1、朴素做法枚举1~m个订单,通过差分......
  • 新版本xcode没有5.5寸模拟器,如何截屏
    安装了最新的xcode,发现安装完后,最新的sdk显示是版本17.5,模拟器默认只是支持iphone15这些最新的设备,这个最新的sdk已经不支持以前的iphone8那些设备了。假如要5.5寸截屏,需要下载很旧的sdk,好几个G,还经常下载失败。但是在苹果的上架流程中,5.5寸可是必须要提供的,苹果可真是不考虑客......
  • 有谁知道如何在 ROS 中使用 python 开发赛车模拟编码?
    在模拟中,主要目标是让自动驾驶汽车读取AprilTags并根据标牌提供的说明进行导航。AprilTags是一种基准标记,可作为重要的视觉提示,传达有关汽车周围环境的信息,例如方向、速度限制和其他关键路标。汽车的车载视觉系统应该检测这些标签,解码嵌入的数据,并相应地调整其运动。这包括在......
  • 学习笔记 String类案例练习 1.模拟用户登录 2.统计字符串英文字母大小写及数字个数
    目录案例一模拟用户登录需求:代码: 案例二统计字符串英文字母大小写及数字个数需求:代码:案例一模拟用户登录需求:已知正确的用户名和密码,请用程序实现模拟用户登录。总共给三次机会,登录之后,给出相应的提示代码:publicstaticvoidmain(String[]args){......
  • 基于ads1292的心电信号采集之芯片关键点备忘
    一前记团队在作基于ads1292的心电数据采集时候,遇到了一些问题。这里做一个记录和备忘。也希望能帮的到同样遇到困难的朋友。 二关注点1reset引脚不能悬空,这个悬空的时候,笔者发现ads1292无法正常工作。  2.start信号在单独使用的时候,不要接GND......
  • 模拟冲刺(Sprint)计划
    选择的小用户故事: 1. 小用户故事2:作为运动员,我希望系统能实时显示每一球的得分情况,以便能让我及时了解比赛局势。-任务1:前端界面设计-开发时间:1天-具体步骤:-创建网页布局,包括比分显示区域。-设计实时更新比分的界面样式。-任务2:后端数据获取与传输-开发时间......