ztz11的noip模拟赛T3:评分系统
代码:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define rii register int i
#define rij register int j
#define int long long
using namespace std;
int n1,m1,p,nl[100005],t;
int pf[10]={0,1,10,15,25,40,55,75,100};
int pow(int a,int b,int p)
{
int res=1;
while(b)
{
if(b&1)
{
res=res*a%p;
}
a=a*a%p;
b>>=1;
}
return res;
}
int exgcd(int a,int b,int& x,int& y)
{
if(!b)
{
x=1;
y=0;
return a;
}
int res=exgcd(b,a%b,y,x);
y-=(a/b)*x;
return res;
}
int reverse(int a,int p)
{
int x,y;
exgcd(a,p,x,y);
return (x%p+p)%p;
}
int C(int n,int m,int p)
{
if(m>n)
{
return 0;
}
int res=1,i,a,b;
for(i=1;i<=m;i++)
{
a=(n+1-i)%p;
b=reverse(i%p,p);
res=res*a%p*b%p;
}
return res;
}
int Lucas(int n,int m,int p)
{
if(m==0)
{
return 1;
}
return Lucas(n/p,m/p,p)*C(n%p,m%p,p)%p;
}
int cal(int n,int a,int b,int p)
{
if(!n)
{
return 1;
}
int i,y=n/p,tmp=1;
for(i=1;i<=p;i++)
{
if(i%a)
{
tmp=tmp*i%p;
}
}
int ans=pow(tmp,y,p);
for(i=y*p+1;i<=n;i++)
{
if(i%a)
{
ans=ans*i%p;
} }
return ans*cal(n/a,a,b,p)%p;
}
int multiLucas(int n,int m,int a,int b,int p)
{
int i,t1,t2,t3,s=0,tmp;
for(i=n;i;i/=a)
{
s+=i/a;
}
for(i=m;i;i/=a)
{
s-=i/a;
}
for(i=n-m;i;i/=a)
{
s-=i/a;
}
tmp=pow(a,s,p);
t1=cal(n,a,b,p);
t2=cal(m,a,b,p);
t3=cal(n-m,a,b,p);
return tmp*t1%p*reverse(t2,p)%p*reverse(t3,p)%p;
}
int exLucas(int n,int m,int p)
{
int i,d,c,t,x,y,q[100],a[100],e=0;
for(i=2;i*i<=p;i++)
{
if(p%i==0)
{
q[++e]=1;
t=0;
while(p%i==0)
{
p/=i;
q[e]*=i;
t++;
}
if(q[e]==i)
{
a[e]=Lucas(n,m,q[e]);
}
else
{
a[e]=multiLucas(n,m,i,t,q[e]);
}
}
}
if(p>1)
{
e++;
q[e]=p;
a[e]=Lucas(n,m,p);
}
for(i=2;i<=e;i++)
{
d=exgcd(q[1],q[i],x,y);
c=a[i]-a[1];
if(c%d)
{
exit(-1);
}
t=q[i]/d;
x=(c/d*x%t+t)%t;
a[1]=q[1]*x+a[1];
q[1]=q[1]*q[i]/d;
}
return a[1];
}
inline int rd(){
int x=0,f=1;char ch=getchar();
while(!isdigit(ch)) {f=ch=='-'?0:;ch=getchar();}
while(isdigit(ch)) {x=(x<<1)+(x<<3)+ch-'0';ch=getchar();}
return f?x:-x;
}
bool cmp(int lk,int kl)
{
return lk<kl;
}
void solve()
{
n1=rd();
m1=rd();
p=rd();
// scanf("%lld%lld%lld",&n,&m,&p);
for(rii=1;i<=n1;i++)
{
nl[i]=rd();
// scanf("%lld",&nl[i]);
}
sort(nl+1,nl+n1+1,cmp);
int minx=10,jsq=0;
for(rii=1;i<=m1;i++)
{
int val;
val=rd();
// scanf("%lld",&val);
minx=min(minx,val);
jsq+=pf[val];
}
jsq-=pf[minx];
int cha=(m1-1)*71-jsq;
int mins=cha/29;
if(mins*29<cha)
{
mins++;
}
if(cha<=0)
{
mins=0;
}
int ans=0;
int zx;
zx=rd();
// scanf("%lld",&zx);
int cnt=n1;
for(rii=1;i<=n1;i++)
{
if(nl[i]<zx)
{
cnt--;
}
else
{
break;
}
}
n1=cnt;
for(rii=mins+1;i<=n1;i++)
{
ans+=exLucas(n1,i,p);
ans%=p;
}
printf("%lld\n",ans);
}
signed main()
{
// freopen("pf10.in","r",stdin);
// freopen("pf10.out","w",stdout);
scanf("%lld",&t);
for(rii=1;i<=t;i++)
{
solve();
}
}
ztz11的noip模拟赛T3:评分系统的更多相关文章
- 20161005 NOIP 模拟赛 T3 解题报告
subset 3.1 题目描述 一开始你有一个空集,集合可以出现重复元素,然后有 Q 个操作 1. add s 在集合中加入数字 s. 2. del s 在集合中删除数字 s.保证 s 存在 3. c ...
- 神奇的NOIP模拟赛 T3 LGTB 玩THD
LGTB 玩THD LGTB 最近在玩一个类似DOTA 的游戏名叫THD有一天他在守一座塔,对面的N 个小兵排成一列从近到远站在塔前面每个小兵有一定的血量hi,杀死后有一定的金钱gi每一秒,他都可以攻 ...
- ztz11的noip模拟赛T2:查房
链接: https://www.luogu.org/problemnew/show/U46611 思路: 这道题告你n-1条边就是骗你的 部分分也是骗你的 这道题连对边5分钟的事 一个点对另一个点有影 ...
- ztz11的noip模拟赛T1:愤怒的XiaoX
链接: https://www.luogu.org/problemnew/show/U47231 思路: 这道题其实就是一道双Lazy线段树裸题 因为我们知道,当k一定时,取反偶数次最后k位等于不取反 ...
- 【2019.8.20 NOIP模拟赛 T3】小X的图(history)(可持久化并查集)
可持久化并查集 显然是可持久化并查集裸题吧... 就是题面长得有点恶心,被闪指导狂喷. 对于\(K\)操作,直接\(O(1)\)赋值修改. 对于\(R\)操作,并查集上直接连边. 对于\(T\)操作, ...
- 【2019.7.25 NOIP模拟赛 T3】树(tree)(dfs序列上开线段树)
没有换根操作 考虑如果没有换根操作,我们该怎么做. 我们可以求出原树的\(dfs\)序列,然后开线段树维护. 对于修改操作,我们可以倍增求\(LCA\),然后在线段树上修改子树内的值. 对于询问操作, ...
- 【2019.7.26 NOIP模拟赛 T3】化学反应(reaction)(线段树优化建图+Tarjan缩点+拓扑排序)
题意转化 考虑我们对于每一对激活关系建一条有向边,则对于每一个点,其答案就是其所能到达的点数. 于是,这个问题就被我们搬到了图上,成了一个图论题. 优化建图 考虑我们每次需要将一个区间向一个区间连边. ...
- NOIP模拟赛T3 斐波那契
1.题目 求 \[\sum_{i=1}^n \sum_{j=1}^m \gcd(F_i,F_j) \] 其中 \(F_k\) 表示斐波那契数列的第 \(k\) 项,对 \(10^9 + 7\) 取模. ...
- 10.16 NOIP模拟赛
目录 2018.10.16 NOIP模拟赛 A 购物shop B 期望exp(DP 期望 按位计算) C 魔法迷宫maze(状压 暴力) 考试代码 C 2018.10.16 NOIP模拟赛 时间:2h ...
随机推荐
- c# copy类中值到另外一个对象中
贴图: 调用:
- Array inversion case
package basic.java; import java.util.Scanner; /* * 需求: * (1)键盘录入5个int类型的数据存储数组arr中 * (2)定义方法将arr数组中的 ...
- 路飞学城知识点3缓存知识点之一Djang自带的缓存
缓存是暂时把数据放到哪儿的意思,用于提高查询的访问速度用的,mysql等关系型数据库通常用作备份,数据库进行增删改操作一段时间内存同步到缓存(非关系型数据库中) 缓存与内存的区别: 通常把数据放到内存 ...
- ubuntu16 下安装redis 以及设置其为开机启动
1.下载redis安装包 sudo wget http://download.redis.io/releases/redis-3.2.6.tar.gz 2.解压 tar -zxvf redis-3. ...
- Netty高性能web框架
框架背景: 前期为公司项目做全链路压测,发现公司跑到tomcat上的服务,即使是最简单的方法QPS也就到3000左右,后期查询发现可能和tomcat的业务逻辑有关. 因为以前在项目开发中用netty做 ...
- jquery使页面滚动到底部
function scrollToEnd(){//滚动到底部 var h = $(document).height()-$(window).height(); $(document).scrollTo ...
- Git访问TFS出现权限不足(Using Personal Access Tokens to access Visual Studio Online)
使用GIT克隆TFS服务器上的代码到本地时出现错误如下: fatal: Authentication failed for 'https://***.visualstudio.com/***Proje ...
- iOS设计模式 - 适配器
iOS设计模式 - 适配器 效果 说明 1. 为了让客户端尽可能的通用,我们使用适配器模式来隔离客户端与外部参数的联系,只让客户端与适配器通信. 2. 本教程实现了适配器模式的类适配器与对象适配器两种 ...
- redis主从,哨兵,集群
本次所有操作在docker下进行,搭建方便,迅速构建redis集群. 1. docker安装redis 获取redis:latest(使用官方最新的) 镜像 $ docker pull redis r ...
- C#网络编程(二)应用篇
(一)TcpListen类.TcpClient类 TcpListener类和TcpClient类都是System.Net.Sockets命名空间下的类,利用TcpListener和TcpClient可 ...