8.23<1>题解

T1

考场上全程盯着PDF,不知道OJ上有样例解释?最后题都没读懂,看到OJ上的样例解释之后恍然大悟,然后就过了,我×××××,下次我一定PDF和OJ题面都认真阅读

读懂题之后其实很简单,给序列排序,去重,然后在排好序的数组中寻找原序列前一位和后一位,看是否满足条件就可以了

 1 #include<algorithm>
 2 #include<iostream>
 3 #include<cstdio>
 4 #define int long long
 5 #define maxn 10010
 6 #define mod 2147483647
 7 using namespace std;
 8 int n,ans,ca;
 9 int a[maxn],lsh[maxn];
10 signed main()
11 {
12     while(scanf("%lld",&n)==1)
13     {
14         ca++;  ans=0;
15         for(int i=1;i<=n;++i)  {scanf("%lld",&a[i]);  lsh[i]=a[i];}
16         sort(lsh+1,lsh+n+1);
17         int len=unique(lsh+1,lsh+n+1)-lsh-1;
18         if(len==1)  {printf("Case #%lld: -1\n",ca);  continue;}
19         for(int i=1;i<=n;++i)
20         {
21             a[i]=lower_bound(lsh+1,lsh+len+1,a[i])-lsh;
22             int wz1=a[i]-1,wz2=a[i]+1;
23             if(wz1==0)  wz1=n;
24             if(wz2==len+1)  wz2=1;
25             if((lsh[wz1]+lsh[a[i]])%mod==lsh[wz2])  ans++;
26         }
27         printf("Case #%lld: %lld\n",ca,ans);
28     }
29     return 0;
30 }

T2

据说很像约瑟夫问题2?为什么人家可以打表找规律,我就找不到什么关系,好吧因为我菜,考虑一下,为了方便我们把原本$[1,n]$的编号变为$[0,n)$,每轮游戏之后都重新编号,那么第$i$轮游戏之后所有人的编号应该是向前移动了$i$,也就是变小了$i$,理解一下,原本的编号为$i$的人,编号变成了$0$,所以统一变小了$i$,那么我们就可以利用这个关系,对编号进行逆推,假设我们知道在第$i+1$轮,这个人的编号为$x$,那么在第$i$轮,此人的编号应该是$(x+i){\%}(n-(i-1))$,${\%}$的那部分是在进行第$i$轮游戏是还有多少人,这样的话$O(n)$逆推回来就可以了,记得最后给答案+1,因为我们统一把答案变小了1

 1 #include<cstdio>
 2 using namespace std;
 3 int t,n,ans;
 4 int main()
 5 {
 6     scanf("%d",&t);
 7     while(t--)
 8     {
 9         scanf("%d",&n);  ans=0;
10         for(int i=n-1;i>=1;--i)  ans=(ans+i)%(n-i+1);
11         printf("%d\n",ans+1);
12     }
13     return 0;
14 }

T3

其实就是一个裸的求解数学式子,那我们就先把它抽象为求$N^a{\%}p$而问题出现在了他给的模数$p$不是质数,我们发现$p=2{\times}p_1$,那我们可以把$N^a$分别对2和$p_1$取模,然后合并$CRT$,对$2$取模很简单,只需要判一下$N$的奇偶就可以得到答案,对于另一个式子$N^a{\%}p_1$,由于$a$是组合数的加和,可能会爆$long long$,所以根据某定理,该式可变为$N^{a{\%}{\varphi}(p_1)}{\%}p_1$,那又有一个新问题出现了,$p_1$是质数然而${\varphi}(P_1)$也就是$p_1-1$不为质数,要怎么求呢?分解质因数,求在模每个质因数意义下的$a$的值,还是合并$CRT$即可,这不就××是道$CRT$的板子题嘛,我不会能怎么办

 1 //求N^(a%phi(mod))%phi(mod)
 2 //phi(mod)分解质因数,求对每个数取模意义下的组合数,求出模每个数意义下的C之和,之后合并CRT
 3 //给合并CRT之后的结果直接快速幂求结果
 4 //再把结果和1或0CRT一下就可以了
 5 #include<iostream>
 6 #include<cstdio>
 7 #include<vector>
 8 #define ll long long
 9 #define moddd 54184622
10 #define maxn 1001000
11 using namespace std;
12 int n,g;
13 int mod[6]={0,2,3,5,7,129011};
14 ll jc[maxn],ny[maxn];
15 vector <int> G;
16 vector <ll> ans;
17 int gcd(int a,int b)
18 {
19     return (b==0)?a:gcd(b,a%b);
20 }
21 ll ksm(ll a,ll b,ll c)
22 {
23     ll ans=1;
24     while(b)
25     {
26         if(b&1)  ans=(ans*a)%c;
27         a=(a*a)%c;  b=b>>1;
28     }
29     return ans;
30 }
31 ll C(int n,int m,int modd)
32 {
33     if(n<m)  return 0;
34     if(n<modd&&m<modd)  return ((jc[n]*ny[m])%modd*ny[n-m])%modd;
35     return (C(n/modd,m/modd,modd)*C(n%modd,m%modd,modd))%modd;
36 }
37 ll exgcd(ll a,ll b,ll &x,ll &y)
38 {
39     if(b==0)  {x=1;  y=0;  return a;}
40     int gcd=exgcd(b,a%b,x,y);
41     int t=x;  x=y;  y=t-a/b*y;
42     return gcd;
43 }
44 ll CRT()
45 {
46     ll x,y;  ll a=0,mm,nn=1;
47     for(int i=1;i<=5;++i)  nn*=mod[i];
48     for(int i=1;i<=5;++i)
49     {
50         mm=nn/mod[i];
51         exgcd(mod[i],mm,x,y);
52         a=(a+y*mm*ans[i-1])%nn;
53     }
54     if(a>0)  return a;
55     else  return a+nn;
56 }
57 ll CRTT(ll xxx)
58 {
59     ll x,y;  ll a=0,mm,nn=moddd;
60     mm=nn/2;  exgcd(2,mm,x,y);  a=(a+y*mm*(n%2))%nn;
61     mm=2;  exgcd(moddd/2,mm,x,y);  a=(a+y*mm*xxx)%nn;
62     if(a>0)  return a;
63     else  return a+nn;
64 }
65 int main()
66 {
67     scanf("%d%d",&n,&g);
68     for(int i=1;i<=n;++i)
69         if(gcd(i,n)==1)  G.push_back(i);
70     for(int i=1;i<=5;++i)
71     {
72         int p=mod[i],minnn=min(g,p-1);  jc[0]=1;
73         for(int i=1;i<=minnn;++i)  jc[i]=(jc[i-1]*i)%p;
74         ny[minnn]=ksm(jc[minnn],p-2,p);
75         for(int i=minnn;i>=1;--i)  ny[i-1]=(ny[i]*i)%p;
76         ll an=0;
77         for(int i=0;i<G.size();++i)  an+=C(g,G[i],p);
78         ans.push_back(an);
79     }
80     ll tot=ksm(n,CRT(),moddd/2);
81     printf("%lld\n",CRTT(tot));
82     return 0;
83 }

原文地址:https://www.cnblogs.com/hzjuruo/p/11401491.html

时间: 2024-08-30 16:06:35

8.23<1>题解的相关文章

8.23&lt;2&gt;题解

由于考试第二天就滚回文化课了,所以一直在翘自习改考试题,改到昨天考试之前才刚刚改完,以后就是半集训了,博客可能会经常性咕咕咕,有空会填坑 T1 看这道题的随机生成,其实有点懵,就直接甩到了最后,没来得及看大样例,也没想到可以找规律,于是乎打了20分暴力就滚粗了,实施上如果打开了大样例的话,应该会发现一些猫腻,会发现答案是一个等差数列,而公差就是所有的$a_i$和$k$的$gcd$的最小值,就结束了,证明没怎么看,来自出题人的证明 1 //每次+最小gcd加到k 2 #include<iostre

内部考试总结

2019年8月5日星期一 Kos 题目描述 有\(n\)个人,他们之间将会有\(m\)场比赛(两个人之间可能有多场比赛,但这些比赛的结果不一定完全相同),问获胜场次最多的人获胜的场次数最少 限制范围 \(Time:1000ms\quad Space:512MB\) \(1\le n\le 10^4,0\le m\le 10^4\) 正解算法 建立二分答案,对猜测解\(x\),考虑建立最大流模型 对每场比赛和每个人都建立一个点,从源点向每场比赛连一条容量为\(1\)的边,每个选手向汇点连一条容量为

[考试反思]0220省选模拟27:怪异

怪异的一场考试.考的有点懵 $T1$正解是模拟,人人都能切,然而也没有多少人敢笃定这就是正解吧,常数和精度上下卡着,看运气的题了. $T2$想到了第二档分其实离正解就不远了但是时间不够没往下想.回$T1$卡常去了. $T3$不给状压分,于是猜到一条结论之后并不敢往下想... 然而最后$T1$也没有卡过,考后也在这破玩意上浪费了不少时间... 而且$T3$数据特别谁水暴力可以过,然而因为我不会决策点单调,所以学了学知识点,并没有用暴力水过... T1:飞行棋 大意:长度为$n$的序列,$m$人.每

Leetcode题解(23)

69. Sqrt(x) 题目 分析,题目实现求一个int数的平方根,最暴力的算法就是逐个遍历,从1开始到x,判断是否有一个数i,其中满足i*i<=x,并且(i+1)*(i+1)>x;这个算法发虽然简单,但是效率不高.其实,按照暴力算法的思想,我们可以联想到在一个已经排好序的数组中查找一个数,该数正好满足上面的条件,因此可以采用二分查找的思想.代码如下: 1 class Solution { 2 public: 3 int mySqrt(int x) { 4 int a[10]={0,1,1,1

2019.10.23题解

A. Smooth 标签: 队列 题解: 直接口胡一下算法过程吧: 开B个队列,先在第一个队列里加入1,之后每次取出这B个队列里最小的数x, x便为最小的光滑数,i从小到大枚举并用x*p[i]更新第i个队列, 为了不重复,要用每个数的最小质因子更新即当p[i]|x停止, 因为x一定比上次取出的y要大,所以可以保证每个队列都是单调的, 复杂度$ O(BK) $ B. Six 标签: 记忆化搜索 题解: 设f[i][j]代表已选的质因子集合为i,出现在两个不同的数里的质因子对集合为j的方案数, 记忆

省选模拟23 题解

这篇题解鸽了. A. Expectation B. Sequence C. Counting 原文地址:https://www.cnblogs.com/skyh/p/12309632.html

2016.4.23 浙江省赛题解

Apples and Ideas Time Limit: 2 Seconds      Memory Limit: 65536 KB "If you have an apple and I have an apple and we exchange these apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these

洛谷 P1079 Vigen&#232;re 密码 题解

此文为博主原创题解,转载时请通知博主,并把原文链接放在正文醒目位置. 题目链接:https://www.luogu.org/problem/show?pid=1079 题目描述 16 世纪法国外交家 Blaise de Vigenère 设计了一种多表密码加密算法――Vigenère 密 码.Vigenère 密码的加密解密算法简单易用,且破译难度比较高,曾在美国南北战争中为 南军所广泛使用. 在密码学中,我们称需要加密的信息为明文,用 M 表示:称加密后的信息为密文,用 C 表示:而密钥是一种

2017ZZUACM省赛选拔试题部分题解----谨以纪念我这卡线滚粗的美好经历

写在前面: 其实心里有些小小的不爽又有点小小的舒畅,为啥捏?不爽当然是因为没被选拔上啦,舒畅捏则是因为没被选拔上反而让自己警醒,学长也提点很多很多."沉下去,然后一战成名"学长如是对我说,我很开心.其实这完全算不算是题解,只是我个人的一些小想法而已.而且到现在还有一题不会...让自己长点记性吧. 题目 A :聪明的田鼠 Time Limit: 1 Sec Memory Limit: 128 MB Description 田鼠MIUMIU来到了一片农田,农田可以看成是一个M*N个方格的矩