NOIP模拟测试9
又考崩了咕咕咕。。。
T1:随 好题标记
前置芝士:
原根:质数P的原根g满足1<=rt<P,且rt的1次方,2次方…(P-1)次方在模P意义下可以取遍1到(P-1)的所有整数。
欧拉定理:对于质数P,1<=x<P的任意x的P-1次方在模P意义下都为1。
显然,原根的1次方,2次方…(P-2)次方在模P意义下都不为1,只有(P-1)次方在模P意义下为1.这也是一个数成为原根的充分必要条件。
x^b≡x^(b%φ(p)) (%p)
考虑到这道题的m很大,但状态具有传递性,用倍增算法。
设状态f[i][j]表示选了i波后为原根的j次方的方案总数,另求一个辅助数组g[i][j]表示选择2^i次后为原根的j次方的方案总数,那么dp转移显然:
f[i][(j+k)%(p-1)]=Σf[i-1][j]*g[now][k] (0<=k,j<mod-1)(可以滚动)
注意这里是p-1!由前置芝士可得(因为表示的是次方嘛)。
求g数组同理:
g[i][(j+k)%(mod-1)]=g[i-1][k]*g[i-1][j](0<=k,j<mod-1)
#include<bits/stdc++.h>
#define int long long
#define ts puts("----------");
using namespace std;
const int MOD=;
int g[][],f[][],num[],Map[],bin[],To[];
bitset<>s;
int qpower(int a,int b){
int ans=;
while(b){if(b&)ans=ans*a%MOD;a=a*a%MOD;b>>=;}
return ans%MOD;
}
signed main()
{
int n,m,mod;
scanf("%lld%lld%lld",&n,&m,&mod);
int t=log(m)/log()+;
bin[]=;
for(int i=;i<=;i++)bin[i]=bin[i-]<<;
for(int i=;i<mod;i++){
s.reset();
int base=;
for(int j=;j<mod;j++){
(base*=i)%=mod;
s[base]=;
}
if(s.count()==mod-){
// cout<<i<<endl;
int base=;
for(int j=;j<mod;j++)
(base*=i)%=mod,Map[base]=j,To[j]=base;
Map[]=;To[]=;
break;
}
}
for(int i=;i<=n;i++)
{
int a;
scanf("%lld",&a);
num[a]++;
g[Map[a]][]++;
}
for(int i=;i<=t;i++)
for(int j=;j<mod;j++)
for(int k=;k<mod;k++)
(g[(j+k)%(mod-)][i]+=g[k][i-]*g[j][i-])%=MOD;
// for(int i=0;i<=t;i++)
// for(int j=0;j<mod;j++)
// cout<<j<<' '<<i<<' '<<g[j][i]<<endl;
f[][Map[]]=;
int now=;
int cur=;
for(int i=t;i>=;i--){
if(now+bin[i]>m)continue;
for(int j=;j<mod;j++)f[cur][j]=;
// cout<<i<<endl;
now+=bin[i];
for(int j=;j<mod;j++)
for(int k=;k<mod;k++)
// cout<<k<<' '<<f[cur^1][k]<<" "<<j<<' '<<i<<' '<<g[j][i]<<endl,
(f[cur][(j+k)%(mod-)]+=(f[cur^][k]*g[j][i]))%=MOD;//,cout<<(j+k)%(mod-1)<<' '<<f[cur][(j+k)%(mod-1)]<<endl;
if(now==m)break;
cur^=;
}
int a=;
for(int i=;i<mod;i++)
// cout<<i<<' '<<f[cur][i]<<endl,
(a+=To[i]*f[cur][i])%=MOD;
int b=qpower(qpower(n,m),MOD-);
cout<<(a*b)%MOD<<endl;
return ;
}
n^2的原根
T2:单 好题标记
咕咕咕
这题嘛高斯消元就溜啦,然后获得了10的好成绩,但高斯消元没骗到分。
直接贴代码
注意的点吧:
1.高斯消元不管是不是整数解,一定要开double!
2.整数解向上取整!
3.fabs必须有!
4.sb错误!
总而言之,不要被题里说的保证有整数解蒙蔽了双眼=_=
上正解:
先看一条链的情况:
已知a[i]求b[i]:
考虑每条边的贡献,辣么,b[i]=pr[1]+pr[2]+pr[3]+......+pr[i-1]+ls[i+1]+ls[i+2]+........+ls[n]。
这是因为第一条边对于i来说只有a[1]的贡献,而第二条边有a[1]+a[2]的贡献,然后处理前缀的前缀和后缀的后缀就好啦!
已知b[i]求a[i]:
先把柿子列出来:
b[1]=ls[2]+.....+ls[n]。
b[2]=pr[1]+ls[3]+.....+ls[n]。
作差发现b[1]-b[2]=ls[2]-pr[1],设sum=a[1]+......+a[n]。
辣么显然pr[i]+ls[i+1]=sum
=>b[1]-b[2]=sum-2*pr[1]。
以此类推 b[i]-b[i+1]=sum-2*pr[i]。
累加发现b[1]-b[n]=(n-1)*sum-2*Σpr[i](1<=i<n)
又发现后面那个sigma可以变成b[n]。
所以b[1]+b[n]=(n-1)*sum => sum=(b[1]+b[n])/(n-1)
知道sum就可以利用前面的柿子愉快的推出来了!
树上的以此类推就好啦,不过把前缀后缀换成了子树a[i]的和
AC代码:
#include<bits/stdc++.h>
#define mem(a) memset(a,0,sizeof(a))
#define MAXN 100050
#define int long long
using namespace std;
int n,a[MAXN],b[MAXN],tot,head[MAXN],nxt[MAXN*],to[MAXN*],cnt,rt,sz[MAXN];
int mmp;
void add(int u,int v)
{
to[++cnt]=v;
nxt[cnt]=head[u];
head[u]=cnt;
}
void clear()
{
mem(a);mem(b);tot=;cnt=;mem(head);mem(sz);mmp=;
}
void dfs(int x,int fa,int depth)
{
b[rt]+=a[x]*depth;
sz[x]=a[x];
for(int i=head[x];i;i=nxt[i])
{
int y=to[i];
if(y==fa)continue;
dfs(y,x,depth+);
sz[x]+=sz[y];
}
return ;
}
void dfs1(int x,int fa)
{
if(x!=rt)b[x]=b[fa]+tot-*sz[x];
for(int i=head[x];i;i=nxt[i])
{
int y=to[i];
if(y==fa)continue;
dfs1(y,x);
}
}
void dfs2(int x,int fa)
{
if(x!=rt)tot+=b[x]-b[fa];
for(int i=head[x];i;i=nxt[i])
{
int y=to[i];
if(y==fa)continue;
dfs2(y,x);
}
}
void dfs3(int x,int fa)
{
if(x!=rt)a[x]=sz[x]=(tot+b[fa]-b[x])/;
for(int i=head[x];i;i=nxt[i])
{
int y=to[i];
if(y==fa)continue;
dfs3(y,x);
if(x!=rt)a[x]-=sz[y];
}
if(x!=rt)mmp+=a[x];
return ;
}
signed main()
{
int t;rt=;
scanf("%lld",&t);
while(t--)
{
clear();
scanf("%lld",&n);
for(int i=;i<n;i++)
{
int a,b;
scanf("%lld%lld",&a,&b);
add(a,b);add(b,a);
}
int mt;
scanf("%lld",&mt);
if(!mt)
{
for(int i=;i<=n;i++)scanf("%lld",&a[i]),tot+=a[i];
dfs(,,);
dfs1(,);
for(int i=;i<=n;i++)printf("%lld ",b[i]);
puts("");
}
else
{
for(int i=;i<=n;i++)scanf("%lld",&b[i]);
tot=b[]*;
dfs2(,);
tot/=(n-);
dfs3(,);
a[rt]=tot-mmp;
for(int i=;i<=n;i++)printf("%lld ",a[i]);
puts("");
}
}
return ;
}
T3是个打表找规律题,不说啦
考试反思:
第一次写考试反思,以前只写了题解(甚至有的题解都没写)。
连续爆炸后是波澜不惊,还是任其东西,在你自己,wd大佬一次rk15把自己说的什么都不是,而你次次落后还不知悔改。
你可以笨,但不能自甘堕落,也许努力没有结果,但不努力一定没有结果!
人生百态,世事沉浮,你,只能靠自己啊。
以前的你虽然菜,但基本上不挂分,现在又菜又挂分,是能力问题吗?
为什么以前能做到的现在反而做不到了?
暴力变难了吗? 你变傻了吗? 还是你的态度有问题?
你怎么做的你自己清楚,你想干什么你自然也清楚,而你能不能做到,在你心里也早有定数。
模板不会,知识点理解不透彻,思维不够,你还剩什么呀!
只有暴力,难道你就要用一直挂分的暴力苟且? 就算你能苟过联赛,下面的路呢? 就不走了吗?
一个题的分数是有限的,但算法的优化是无限的,你还在为T3 95分沾沾自喜吗?
一个显然的规律,被你打了两个小时的表,那么多人AC,你就不能找找规律吗?
还是,你就认为自己找不出来?
这不是什么考试技巧,这是你对自己的定位,你凭什么认为就那么难,你就推不出来?
在不该浪费时间的题上浪费时间,该得的分却拿不到。
你的考试策略出现了很大的问题
不管什么题,先试着推一下,骗分是迫不得已的行为。
某学长曾说过:或许这,或许那,都是经历,愿OI,成为你无悔的历练。
NOIP模拟测试9的更多相关文章
- 「题解」NOIP模拟测试题解乱写II(36)
毕竟考得太频繁了于是不可能每次考试都写题解.(我解释个什么劲啊又没有人看) 甚至有的题目都没有改掉.跑过来写题解一方面是总结,另一方面也是放松了. NOIP模拟测试36 T1字符 这题我完全懵逼了.就 ...
- 2019.8.3 [HZOI]NOIP模拟测试12 C. 分组
2019.8.3 [HZOI]NOIP模拟测试12 C. 分组 全场比赛题解:https://pan.baidu.com/s/1eSAMuXk 刚看这题觉得很难,于是数据点分治 k只有1和2两种,分别 ...
- 2019.8.3 [HZOI]NOIP模拟测试12 B. 数颜色
2019.8.3 [HZOI]NOIP模拟测试12 B. 数颜色 全场比赛题解:https://pan.baidu.com/s/1eSAMuXk 数据结构学傻的做法: 对每种颜色开动态开点线段树直接维 ...
- 2019.8.3 [HZOI]NOIP模拟测试12 A. 斐波那契(fibonacci)
2019.8.3 [HZOI]NOIP模拟测试12 A. 斐波那契(fibonacci) 全场比赛题解:https://pan.baidu.com/s/1eSAMuXk 找规律 找两个节点的lca,需 ...
- NOIP模拟测试17&18
NOIP模拟测试17&18 17-T1 给定一个序列,选取其中一个闭区间,使得其中每个元素可以在重新排列后成为一个等比数列的子序列,问区间最长是? 特判比值为1的情况,预处理比值2~1000的 ...
- NOIP模拟测试1(2017081501)
好,今天是cgg第一次举行模拟测试,希望各位支持. 时间限制:2小时 题目链接: 题目一:水得都没名字了 题目二:车站 题目三:选数 不要觉得2小时太少,我的题目很良心,都很简单. 答案可以在模拟测试 ...
- 「题解」NOIP模拟测试题解乱写I(29-31)
NOIP模拟29(B) T1爬山 简单题,赛时找到了$O(1)$查询的规律于是切了. 从倍增LCA那里借鉴了一点东西:先将a.b抬到同一高度,然后再一起往上爬.所用的步数$×2$就是了. 抬升到同一高 ...
- 2019.8.14 NOIP模拟测试21 反思总结
模拟测试20的还没改完先咕着 各种细节问题=错失190pts T1大约三分钟搞出了式子,迅速码完,T2写了一半的时候怕最后被卡评测滚去交了,然后右端点没有初始化为n…但是这样还有80pts,而我后来还 ...
- 2019.8.9 NOIP模拟测试15 反思总结
日常爆炸,考得一次比一次差XD 可能还是被身体拖慢了学习的进度吧,虽然按理来说没有影响.大家听的我也听过,大家学的我也没有缺勤多少次. 那么果然还是能力问题吗……? 虽然不愿意承认,但显然就是这样.对 ...
- 2019.8.1 NOIP模拟测试11 反思总结
延迟了一天来补一个反思总结 急匆匆赶回来考试,我们这边大家的状态都稍微有一点差,不过最后的成绩总体来看好像还不错XD 其实这次拿分的大都是暴力[?],除了某些专注于某道题的人以及远程爆踩我们的某学车神 ...
随机推荐
- 关于SpringBoot 1.x和2.x版本差别
有点小差别 基本上基于SpringBoot的代码不需要改动,但有些配置属性和配置类,可能要改动,改动原因是 配置和类的更新或者是改名一般正常的MVC,数据库访问这些都不需要改动,下面按照本书章节说明区 ...
- 阿里云VS腾讯云 谁才是中国未来的云计算之王?
阿里云早在 2009 年就已经开始布局云计算领域,具有先发优势.据统计,40% 的中国 500 强企业.近一半中国上市公司.80% 中国科技类公司是阿里云的客户.而腾讯云基于腾讯自身在游戏.视频.社交 ...
- k8s中负载均衡器【ingress-nginx】部署
在Kubernetes中,服务和Pod的IP地址仅可以在集群网络内部使用,对于集群外的应用是不可见的.为了使外部的应用能够访问集群内的服务,在Kubernetes 目前 提供了以下几种方案: Node ...
- TensorFlow2.0(7):激活函数
.caret, .dropup > .btn > .caret { border-top-color: #000 !important; } .label { border: 1px so ...
- Java编程思想——第17章 容器深入研究 读书笔记(二)
五.List的功能方法 排除Collection已包含的方法外还增加了 boolean addAll(int index, Collection<? extends E> c);从索引位置 ...
- Jackson替换fastjson
为什么要替换fastjson 工程里大量使用了fastjson作为序列化和反序列化框架,甚至ORM在处理部分字段也依赖fastjson进行序列化和反序列化.那么作为大量使用的基础框架,为什么还要进行替 ...
- VoodooPad Mac笔记本
VoodooPad Mac笔记本 VoodooPad是记录您的笔记和想法的地方.想法,图片,列表,密码和妈妈的苹果派食谱.包括您需要跟踪和组织的所有内容,VoodooPad会与您一起成长而不会妨碍您. ...
- 卡特兰(Catalan)数入门详解
也许更好的阅读体验 基本概念 介绍 学卡特兰数我觉得可能比组合数要难一点,因为组合数可以很明确的告诉你那个公式是在干什么,而卡特兰数却像是在用大量例子来解释什么时卡特兰数 这里,我对卡特兰数做一点自己 ...
- ESP8266开发之旅 进阶篇② 闲聊Arduino IDE For ESP8266烧录配置
授人以鱼不如授人以渔,目的不是为了教会你具体项目开发,而是学会学习的能力.希望大家分享给你周边需要的朋友或者同学,说不定大神成长之路有博哥的奠基石... QQ技术互动交流群:ESP8266&3 ...
- 4. SOFAJRaft源码分析— RheaKV初始化做了什么?
前言 由于RheaKV要讲起来篇幅比较长,所以这里分成几个章节来讲,这一章讲一讲RheaKV初始化做了什么? 我们先来给个例子,我们从例子来讲: public static void main(fin ...