这题就是一个直接的数论码农题、

扩展lucas+CRT+exgcd直接搞过去

而第一遍wa了,因为没开long long、、

码:

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;
#define N 1000005
#define ll long long
ll P,p[N],a[N],n,x,y,pp[N],cnt;
struct la
{ll ji,ci;
};
void exgcd(int a,int b)
{if(!b){x=1;y=0;return;}exgcd(b,a%b);ll t=x;x=y;y=t-(a/b)*y;
}
ll ksm(ll a,ll b,ll mod)
{int ans=1;while(b){if(b%2)ans=ans*a%mod;b/=2;a=a*a%mod;        }   return ans;
}
la cl(ll n,ll xh)
{   la o;if(n==0){o.ci=0;o.ji=1;return o;       }ll i;ll zq=n/pp[xh],gs=n/p[xh];ll lin=1;if(zq>0){for(i=1;i<=pp[xh];i++){if(i%p[xh]==0)continue;lin*=i;lin%=pp[xh];        }lin=ksm(lin,zq,pp[xh]);}for(i=zq*pp[xh]+1;i<=n;i++){if(i%p[xh]==0)continue;lin*=i;lin%=pp[xh];        }la oo=cl(gs,xh);o.ci=gs+oo.ci;o.ji=(lin*oo.ji)%pp[xh];return o;
}
ll C(ll a,ll b,ll xh)
{if(a<b)return 0;la s1=cl(a,xh);la s2=cl(b,xh);la s3=cl(a-b,xh);ll fmci=s2.ci+s3.ci;ll fzci=s1.ci;exgcd((s3.ji*s2.ji)%pp[xh],pp[xh]);ll daan=(s1.ji*x)%pp[xh]*ksm(p[xh],fzci-fmci,pp[xh])%pp[xh];return daan;
}
ll CRT()
{ll i;ll ans=0;for(i=1;i<=cnt;i++)P*=pp[i];for(i=1;i<=cnt;i++){ll pi=P/pp[i];exgcd(pi,pp[i]);ans=(ans+pi*x*a[i])%P;  }return (ans+P)%P;
}
int main()
{ll lin;ll i,j,m;scanf("%lld",&P);for(i=2;i<=P;i++){if(P%i==0){p[++cnt]=i;pp[cnt]=1;a[cnt]=1;while(P%i==0){pp[cnt]*=i;P/=i;         }       }}scanf("%lld",&n);scanf("%lld",&m);for(j=1;j<=m;j++){scanf("%lld",&lin);  for(i=1;i<=cnt;i++){a[i]=a[i]*C(n,lin,i)%pp[i]; }n-=lin;}if(n<0){printf("Impossible");}else   printf("%lld",CRT());
}

2017.9.6 礼物 思考记录相关推荐

  1. 2017.9.5 组合数学 思考记录

    这题风格很正统.所以我感觉如果自己能不靠题解把这个题做出来,那应该就学得不错了.. 于是在历尽千辛万苦之后,终于1A了.(事后证明 结论题的结论强行无视 乱搞也是有可能AC的) xym&ISA ...

  2. 2017.9.4 Nim 思考记录

    只要知道nim的结论   这题就是链剖板子题.1A 注意bzoj 的  换行符是     \r!!      \r!!      \r!! 就说一下链剖的易错点吧: 1.记录父节点.sz.深度 2.当 ...

  3. 2017.10.28 排序 思考记录

    这个题有一种套路,就是大小关系转化成01串,这样就变成了二分检验问题,, 就是把排序变成区间修改,然后单点查询.. 把所有比他小的赋成0,比他大的赋成1 然后判断要求位是0还是1来判断答案与当前值的大 ...

  4. 2017.10.28 压缩 思考记录

    这个题首先要知道M和R不是栈的搭配,是贪心的搭配,,就是向左找到第一个M.. 如 abababab cdcdcdcd abababab cdcdcdcd   = abRRcdcdcdcdR != Ma ...

  5. 2017.10.6 单词 思考记录

    少有的会做的ac自动机题 .这个题是匹配模式串. 所以就不需要匹配的过程,只需要建出fail树,然后直接拓扑 由于每次加进去一个单词,这个单词的每一个字母都有可能作为最后一个字母影响他的失配,所以词路 ...

  6. 2017.10.5 高速公路 思考记录

    ..一开始死活不知道样例8/3是怎么算出来的.. 后来才发现右端点要-1.. 这个题说是期望,但因为每个点的概率相同,所以直接求和然后除就可以了 维护每个区间的答案,听说直接维护答案很难写,,感觉还可 ...

  7. 2017.10.1 蚯蚓 思考记录

    现在看来这个题真心不难. 如果能保证一个从大到小的顺序的话,对所有的数依次进行相同比例的分裂操作,左右两边一定也是单调的 由于每次要+q,等价于取出元素-q,这在式子里是不影响大小关系的 所以就sor ...

  8. 2017.9.28 产品加工 思考记录

    很早之前做的了.发现bzoj上竟然没提交过 于是又重推了一遍 首先这个ti<=5是用来让n^2的复杂度降一降的, 然后就考虑装每个物品之后各个机器的耗时,同时,对于一个A机器的耗时,可能会有多个 ...

  9. 2017.9.28 降雨量 思考记录

    论逻辑清晰的重要性. 首先大小的关系明摆着是要你建一颗线段树 然后就可以分类讨论了 x没有 y有 x有 y没有 x没有 y没有 x有 y有 对于都没有的情况  只可能是maybe 对于一个没有的情况, ...

最新文章

  1. 重温目标检测--Faster R-CNN
  2. 新遇到的系统编译问题!已解决!
  3. Oracle 常见的33个等待事件
  4. C#中创建、打开、读取、写入、保存Excel的一般性代码
  5. 结构体字节大小计算方法
  6. android中心点旋转晃动_Android:如何在中心点上旋转位图
  7. Python基本数据类型(二)
  8. php网页论坛制作教程,PHP开发 小型论坛教程之登录HTML页面
  9. 基于yolo5工地安全帽和禁入危险区域识别系统,附数据集
  10. HDU 3420 Bus Fair [补]
  11. spring定时器时间表达式
  12. Lenovo System x3650 M5 使用ServerGuide安装win2016(U盘安装)
  13. 【算法笔记】树形DP算法总结详解
  14. 手机照片分辨率dpi怎么调?一寸证件照照片dpi怎么调300?
  15. linux透明桥,linux透明防墙(网桥模式).doc
  16. xss.haozi靶场通关
  17. 怎么将flac转换成mp3
  18. 宝宝起名神器小程序源码_支持多种流量主模式
  19. 【Bugzilla】我按照bugzilla的官方指导进行的安装。(一)
  20. 三维点云课程(七)——特征点描述

热门文章

  1. Linux搜狗输入法候选词乱码
  2. Python官方文档学习心得(第六篇)
  3. 计算机绘图理论试题库,CAD理论试卷及答案「最新」
  4. python进行数据分析 简书_《利用python进行数据分析》读书笔记1
  5. python做bi系统_2020年很受Python工程师喜爱的5款数据可视化bi软件
  6. java 文曲星猜数字,文曲星里的猜数字代码(原创)
  7. 如何用servle和c3p0-DBUtils实现用户登录功能
  8. 三次握手和四次挥手图解_详解 TCP 连接的“三次握手”与“四次挥手”
  9. 3_数据分析—数据清洗及特征处理
  10. html图片圆点切换,JQuery和html+css实现带小圆点和左右按钮的轮播图实例