NOIP模拟测试34「次芝麻·呵呵呵·长寿花」

次芝麻

题解

大力打表,发现快速幂,

例如初始$5$ $6$,那么第一次就是$5*2\%11=10$,$6*2\%11=1$.

代码

#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll n,m,k,d;
ll g(ll x,ll k,ll s=1){for(;k;k>>=1,x=x*x%d)if(k&1) s=s*x%d;return s;
}
int main(){scanf("%lld%lld%lld",&n,&m,&k);d=n+m;printf("%lld\n",min((n*g(2,k))%d,(m*g(2,k))%d));
}
View Code

喝喝喝

题解

把$a[i]\%a[j]=k$转化为$a[i]-k=y*a[i]$,

开桶维护$a[i]-k$

每次枚举$y$,看桶里是否有对应值,找到当前$i$左侧的最右能形成坏对的$v$,然后坏对个数就是$v$,,最后容斥就完了

考试时打的$n^2$,剪一个小枝能$70$分,然而我没减

代码

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define A 4444444
ll a[A],ve[A],tong[A];
ll n,K,ans=0,maxx=0,jc=0;
int main(){scanf("%lld%lld",&n,&K);for(ll i=1;i<=n;i++)scanf("%lld",&a[i]),maxx=max(maxx,a[i]);ll num=0;for(ll i=1;i<=n;i++){ve[i]=max(ve[i],ve[i-1]);if(a[i]<K) continue ;ll maxid=0;for(ll b=0;b*a[i]<=maxx;b++)if(tong[b*a[i]])maxid=max(maxid,tong[b*a[i]]);tong[a[i]-K]=i;        if(a[i]==K) continue ;if(maxid!=i) ve[i]=max(maxid,ve[i]);}for(ll i=1;i<=n;i++)if(ve[i])ans+=(ve[i]);printf("%lld\n",n*(n+1)/2-ans+jc);
}
View Code

长寿花

题解

部分分状压$dp$,然而很难打,打了状压就陷进去了,具体$m$不用考虑

#include<iostream>
#include<cstring>
#include<cstdio>
#include<bitset>
#define LL long long
using namespace std;
int n,m,p;
int a[1000010];
LL g[1010][1<<11],t[1<<11];
LL f[1010][1<<11];
LL poww(LL a,int b)
{    LL ans=1;while(b){if(b&1)ans=ans*a%p;a=a*a%p;b=b>>1;}return ans;
}
inline int read();
signed main()
{n=read(),m=read(),p=read();for(int i=1;i<=n;i++)a[i]=read();if(m<=10){for(int i=1;i<=n;i++)for(int k=0;k<(1<<m);k++){int tem=k,num=0;while(tem){num+=tem&1;tem=tem>>1;}g[i][k]=num*poww(num-1,a[i]-1)%p;}for(int i=1;i<=n;i++){for(int k=0;k<(1<<m);k++)for(int l=0;l<(1<<m);l++)if(l!=k&&(l|k)==k)g[i][k]=((g[i][k]-g[i][l])%p+p)%p;}LL sum=0;for(int k=0;k<(1<<m);k++)f[1][k]=g[1][k],sum=(sum+f[1][k])%p;for(int i=2;i<=n;i++){for(int k=0;k<(1<<m);k++)f[i][k]=((sum-f[i-1][k])%p+p)%p*g[i][k]%p;sum=0;for(int k=0;k<(1<<m);k++)sum=(sum+f[i][k])%p;}
/*        for(int i=1;i<=n;i++)for(int k=0;k<(1<<m);k++){bitset<3>t(k);cout<<i<<" "<<t<<" "<<g[i][k]<<endl;}*/printf("%lld\n",sum%p);return 0;}
}
inline int read()
{int s=0,f=1;char a=getchar();while(a<'0'||a>'9'){if(a=='-')f=-1;a=getchar();}while(a>='0'&&a<='9'){s=s*10+a-'0';a=getchar();}return s*f;
}
Al_Ca的代码

正解

设$f[i][j]$为到第$i$,当前颜色$j$

$f[i][j]=\sum\limits_{k=1}^{k<=a[i-1]} f[i-1][k](之前的方案数贡献)*(当前层方案数)-(和上一层重合的)$

当前层可看作$j$个集合,相同集合元素互不相邻

$g[i][j]$表示$i$个元素放$j$个集合

考虑递推

当前值可以是之前一个集合

$g[i][j]=g[i-1][j]*(j-1)$解释一下

不能和之前相同集合相邻

$g[i][j]=g[i-1][j-1]*j$

也可以是一个新的集合,你之前知道$j-1$个集合,但你不知道当前新增是哪一个

去重,颜色集合相同则颜色数相同

 $f[i][j]=\sum\limits_{k=1}^{k<=a[i-1]} f[i-1][k]*g[a[i]][j]*C[a[i]][j]-f[i-1][j]*g[a[i]][j]$

代码

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define A 5555
#define maxn 3333333
ll a[maxn],bj[maxn],prime[maxn],t[maxn];
long long g[A][A],f[2][maxn],C[maxn];
long long sum;
ll n,m,K,ans=0,maxx=0,jc=0,mod;
void debuger_g();
void jia(ll x){
//    printf("+x=%lld bj=%lld\n",x,bj[x]);while(x>1){t[bj[x]]++;x=x/bj[x];}
}
void jian(ll x){
//    printf("-x=%lld bj=%lld\n",x,bj[x]);while(x>1){t[bj[x]]--;x=x/bj[x];}
}
void get_prime(ll o){ll gby=o;for(ll i=2;i<=gby;i++){if(!bj[i]){prime[++prime[0]]=i;bj[i]=i;}for(ll j=1;j<=prime[0]&&prime[j]*i<=gby;j++){bj[i*prime[j]]=prime[j];if((i%prime[j])==0) break ;}}
}
ll get_(){ll ans=1;for(ll i=1;i<=prime[0];i++){for(ll j=1;j<=t[prime[i]];j++)ans=1ll*ans*prime[i]%mod;
//        printf("ans=%lld t[%lld]=%lld prime=%lld\n",ans,i,t[prime[i]],prime[i]);
    }return ans;
}
void get_C(){ll gby=min(m,5000ll);for(ll i=1;i<=gby;i++){jia(m-i+1);jian(i);C[i]=get_();
//        printf("C[%lld]=%lld\n",i+1,C[i+1]);
    }
}
int main(){scanf("%lld%lld%lld",&n,&m,&mod);for(ll i=1;i<=n;i++)scanf("%lld",&a[i]),maxx=max(maxx,a[i]);g[1][1]=1;g[2][2]=2;for(ll i=3;i<=5000;i++)for(ll j=2;j<=i&&j<=m;j++)g[i][j]=((j-1)*g[i-1][j]%mod+g[i-1][j-1]*j%mod)%mod;get_prime(m);get_C();for(ll j=1;j<=a[1];j++){//处理出来i==1的情况f[1][j]=C[j]*g[a[1]][j]%mod;sum=(sum+f[1][j])%mod;}for(ll i=2;i<=n;i++){for(ll j=0;j<=maxx;j++)f[i&1][j]=0;for(ll j=1;j<=a[i];j++){f[i&1][j]=(C[j]%mod*g[a[i]][j]%mod*sum%mod-(f[(i-1)&1][j]*g[a[i]][j]%mod)%mod+mod)%mod;}sum=0;for(ll j=1;j<=a[i];j++)sum=(sum+f[i&1][j])%mod;}printf("%lld\n",sum);
}
View Code

 

转载于:https://www.cnblogs.com/znsbc-13/p/11454329.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/349597.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java Bean验证基础

这篇文章总结了一些简单易用的示例&#xff0c;这些示例说明了您想使用Java Beans Validation API&#xff08;JSR 349&#xff0c;JSR 303&#xff09;进行的最常见操作。 记住&#xff0c;Beans Validation独立于Java EE。 尽管它是作为Java EE兼容服务器的一部分内置的&…

NOIP模拟测试「简单的区间·简单的玄学·简单的填数·简单的序列」

简单的区间 $update$ 终于$AC$了 找到$(sum[r]sum[l](sum表示以中间点为基准的sum)-mx)\%k0$的点 注意这里$sum$表示是以$mid$为基准点,(即$sum[l]$为后缀和,$sum[r]$为前缀和) 回忆$(sum[r]-sum[l])\%k0$这个经典问题做法(入阵曲简化版),开桶,桶里维护$sum[l]\%k$,那么$r$贡献…

苹果手机变卡了怎么解决_iOS 变卡怎么解决?一招搞定!无需刷机

iOSiOS 因为其优秀的底层交互逻辑&#xff0c;能让一部 iPhone 在不跨版本更新系统的前提下&#xff0c;至少保证 2 年内如新机般流畅。两年之后呢&#xff1f;你是否为手中的老将渐衰而苦恼过&#xff1f;本人对手机的流畅度十分敏感&#xff0c;可以说到了极致。付款时&#…

NOIP模拟测试38「金·斯诺·赤」

金 辗转相减见祖宗 高精 #include<bits/stdc.h> using namespace std; #define A 2000 #define P 1 #define N 10 #define ll long long ll n,T; char sjdfj[A]; struct bignum {ll n[A],l;bignum(){l1,memset(n,0,sizeof(n));}void clear(){while(l>1&&!n[l-…

什么是JSON处理(JSON-P API)?

Java EE中的JSON-P简介 JSON处理1.0&#xff08; JSR 353 &#xff09;的Java API是一个低级&#xff0c;轻量级的JSON解析器和生成器&#xff0c;它提供了在属性和值级别上操作JSON数据的能力。 JSR 353提供了两种JSON处理模型&#xff1a; 对象模型和流模型。 两种模型都可以…

电视机原理图_电工电气,如何看电气原理图和接线图,如何设计图纸?

电气图纸一般可分为两大类&#xff0c;一类为电力电气图&#xff0c;它主要是表述电能的传输、分配和转换&#xff0c;如电网电气图、电厂电气控制图等。另一类为电子电气图&#xff0c;它主要表述电子信息的传递、处理&#xff1b;如电视机电气原理图。本文主要谈电力电气图的…

NOIP模拟测试39,思维禁锢专场「工业题·玄学题·卡常题」

工业题 题解 抱歉,题解没时间写了 代码 #include<bits/stdc.h> using namespace std; #define ll long long #define A 6666666 #define mod 998244353 ll jie[A],ni[A],acnt[A],bcnt[A]; ll fheng[A],fshu[A]; ll n,m,a,b; ll meng(ll x,ll k){ll ans1;for(;k;k>>…

ubuntu 如何登录远程服务器_VSCode远程登录云服务器、树莓派实现在线调试代码...

在PyCon2019大会上&#xff0c;微软发布了VSCode Remote&#xff0c;开启了远程开发的新时代&#xff01;Remote可以帮助开发者在容器、物理机器或虚拟机&#xff0c;以及WSL上实现无缝的远程开发。通过安装Remote Development Extension Pack&#xff0c;开发者可以快速上手远…

macosx jdk_MacOSX环境上的多个Java JDK

macosx jdk同样&#xff0c;这是在Mac&#xff08;OSX 10.8.x &#xff09;上配置Java开发环境的一个小技巧。 如果您现在真的开始&#xff0c;我建议您阅读我以前的文章之一 &#xff0c;这是一种快速干净的方法&#xff08;我想&#xff09;来设置环境变量并开始Java编码。 今…

屏幕方向读取与锁定:Screen Orientation API(转)

什么是 Screen Orientation API Screen Orientation API 为 Web 应用提供了读取设备当前屏幕方向、旋转角度、锁定旋转方向、获取方向改变事件的能力。使得特定应用在屏幕方向方面增强用户体验&#xff0c;如视频和游戏。该标准目前处于工作组草案状态&#xff0c;最近一个修改…

scenebuilder各控件属性介绍_Flutter 全栈式——基础控件

在Flutter中&#xff0c;UI小控件有两种设计风格&#xff0c;一种是Material设计&#xff0c;这是安卓的官方设计风格&#xff0c;另一种则是Cupertino风格&#xff0c;是iOS的官方设计风格。因此&#xff0c;当遇到带有这两个单词开头的控件时&#xff0c;我们应该明确他们表达…

正义联盟的Spring靴

正义联盟的黑暗时代已经来临&#xff0c;强大的Darkseid即将征服人类。 蝙蝠侠在《神力女超人》的帮助下&#xff0c;努力使联盟与一个关键方面失联。 适当的正义联盟成员管理系统。 由于时间不在他们身边&#xff0c;他们不想经历繁琐的过程&#xff0c;从头开始用他们需要的所…

Fetch

fetch是一种HTTP数据请求的方式&#xff0c;是XMLHttpRequest的一种替代方案。fetch不是ajax的进一步封装&#xff0c;而是原生js。Fetch函数就是原生js&#xff0c;没有使用XMLHttpRequest对象。 ajax 使用步骤1.创建XmlHttpRequest对象2.调用open方法设置基本请求信息3.设置发…

boost安装_Centos安装MySQL

安装MySQLMySQL 各版本介绍视频观看:https://www.bilibili.com/video/BV1ap4y1i75jMySQL 官网:https://www.mysql.com/cn/MySQL Community Server社区版本&#xff0c;开源免费&#xff0c;但不提供官方技术支持。MySQL Enterprise Edition 企业版本&#xff0c;需付费&#xf…

选择Java加密算法第3部分–公钥/私钥非对称加密

抽象 这是涵盖Java加密算法的三部分博客系列的第3部分。 本系列介绍如何实现以下目标&#xff1a; 使用SHA–512散列 使用AES–256的单密钥对称加密 RSA–4096 这第三篇文章详细介绍了如何实现非对称的RSA-4096公/私钥加密。 让我们开始吧。 免责声明 这篇文章仅供参考。 …

Error: Cannot find module '@babel/core'

官方默认babel-loader需要搭配最新版本babel 更新到最高版本: npm install -D babel-loader babel/core babel/preset-env webpack 转载于:https://www.cnblogs.com/nocry/p/11493363.html

javabeans_膨胀的JavaBeans –不要在您的API中添加“ Getters”

javabeans我已经最近在博客的想法的JavaBeans™如何可以扩展以减少在Java世界中&#xff0c;这被广泛接受的公约设立的膨胀。 该文章在DZone上重新发布&#xff0c;并在这里获得了颇具争议的反馈&#xff08;例如&#xff0c;大多数试图将一些新想法带入Java世界的想法&#xf…

uniapp 子组件 props拿不到数据_来吧!一文彻底搞定Vue组件!

点击蓝色 “达达前端小酒馆” 关注我哦!加个 “星标” &#xff0c;每天一篇文章&#xff0c;一起学编程作者 | Jeskson来源 | 达达前端小酒馆Vue组件的概述组件是什么呢&#xff0c;了解组件对象的分析&#xff0c;Vue组件中的data属性&#xff0c;props传递数据的原理到底是…

csp-s模拟测试41「夜莺与玫瑰·玫瑰花精·影子」

夜莺与玫瑰 题解 联赛$T1$莫比乌斯$\%\%\%$ $dead$ $line$是直线 首先横竖就是$nm$这比较显然 枚举方向向量 首先我们枚举方向向量时只枚举右下方向,显然贡献$*2$就是所有斜着的直线 $i,j$表示当自己向右$i$个单位长度,向下$j$单位长度 我们相同斜率下只算最短的线贡献,(因为其…

春天重试,因为冬天来了

好的&#xff0c;这实际上与冬天无关&#xff0c;众所周知&#xff0c;冬天已经到了 。 它是关于Spring Retry的&#xff0c;Spring是一个小的Spring框架库&#xff0c;它使我们可以将重试功能添加到应可重试的任何任务中。 这里有一个很好的教程 &#xff0c;解释了如何设置简…