B 君的第一题 lanzhou

$x^{\frac{p-1}{2}}\equiv 1(mod\ p)$

$x\equiv x*x^{\frac{p-1}{2}} (mod\ p)$

$x\equiv x^{\frac{p+1}{2}} (mod\ p)$

$\sqrt{x}\equiv x^{\frac{p+1}{4}} (mod\ p)$

就成了一道快速幂的题了,然而唯二A了的我和李巨都是用类似复数快速幂那种方法暴力开根号。

我:这道题感觉没意义啊,会二次剩余的暴力开根也开出来了,不会的怎么都GG了。

李巨:没有啊,你只要会费马小定理这个题随便推吧。

(数学一窍不通—根本推不出来的)我:%%%

要是7个月前我会开根号的话现在我大概就不在这里了吧。

 //Achen
#include<bits/stdc++.h>
#define For(i,a,b) for(int i=(a);i<=(b);i++)
#define Rep(i,a,b) for(int i=(a);i>=(b);i--)
#define Formylove return 0
const int p=,inv2=,inv4=;
typedef long long LL;
typedef double db;
using namespace std;
int T;
LL b,c; template<typename T> void read(T &x) {
char ch=getchar(); x=; T f=;
while(ch!='-'&&(ch<''||ch>'')) ch=getchar();
if(ch=='-') f=-,ch=getchar();
for(;ch>=''&&ch<='';ch=getchar()) x=x*+ch-''; x*=f;
} LL w;
struct fs {
LL a,b;
fs(){}
fs(LL a,LL b):a(a),b(b){}
}; LL mo(LL x) { return x<?x+p:(x>=p?x-p:x); } fs operator +(const fs&A,const fs&B) { return fs(mo(A.a+B.a),mo(A.b+B.b)); }
fs operator *(const fs&A,const fs&B) { return fs(mo(A.a*B.a%p+A.b*B.b%p*w%p),mo(A.a*B.b%p+A.b*B.a%p)); } LL fsksm(fs a,LL b) {
fs rs=fs(,),bs=a;
while(b) {
if(b&) rs=rs*bs;
bs=bs*bs;
b>>=;
}
return rs.a;
} LL ksm(LL a,LL b) {
LL bs=a%p,rs=;
while(b) {
if(b&) rs=rs*bs%p;
bs=bs*bs%p;
b>>=;
}
return rs;
} int ck(LL x) { return ksm(x,(p-)/)==; } LL get_sqr(LL x) {
LL a=rand()%p+;
while(ck(mo(a*a%p-x))) {
a=rand()%p+;
}
w=mo(a*a%p-x);
return fsksm(fs(a,),(p+)/);
} #define ANS
int main() {
#ifdef ANS
freopen("lanzhou.in","r",stdin);
freopen("lanzhou.out","w",stdout);
#endif
srand();
read(T);
For(cs,,T) {
read(b); read(c);
LL x=(b*b%p*inv4%p-c+p)%p;
if(!x) {
LL m1=b*inv2%p;
LL m2=mo(b-m1);
if(m1>m2) swap(m1,m2);
printf("%lld %lld\n",m1,m2);
}
else if(ck(x)) {
LL y=get_sqr(x);
LL m1=mo(y+b*inv2%p);
LL m2=mo(b-m1);
if(m1>m2) swap(m1,m2);
printf("%lld %lld\n",m1,m2);
}
else puts("-1 -1");
}
Formylove;
}

B 君的第二题 xining

Bike老爷专门卡kmp,成功卡掉了一个机房。

因为有退格操作,可能aaaaaaaab-b-b-b-b这样的数据就会一直跳,所以要把自动机建出来,也就是保存下每个位置选择a~z每个字母时会走到哪里。

同理AC自动机也是,sxy和llj的写法都是要补全儿子的,我以前那种不补全儿子的写法就可以被某些题卡。

 //Achen
#include<bits/stdc++.h>
#define For(i,a,b) for(int i=(a);i<=(b);i++)
#define Rep(i,a,b) for(int i=(a);i>=(b);i--)
#define Formylove return 0
const int N=;
typedef long long LL;
typedef double db;
using namespace std;
char s[N],op[N];
int nxt[N],n,ts[N][]; template<typename T> void read(T &x) {
char ch=getchar(); x=; T f=;
while(ch!='-'&&(ch<''||ch>'')) ch=getchar();
if(ch=='-') f=-,ch=getchar();
for(;ch>=''&&ch<='';ch=getchar()) x=x*+ch-''; x*=f;
} #define ANS
int main() {
#ifdef ANS
freopen("xining.in","r",stdin);
freopen("xining.out","w",stdout);
#endif
memset(ts,-,sizeof(ts));
scanf("%s",s);
scanf("%s",op);
int lena=strlen(s);
s[lena]='&';
memset(ts[],,sizeof(ts[]));
for(int i=,k=;i<=lena;i++) {
For(x,,) {
if(x==s[k]-'a') ts[i][x]=k+;
else if(!k) ts[i][x]=k;
else {
if(x==s[nxt[k-]]-'a') ts[i][x]=nxt[k-]+;
else ts[i][x]=ts[nxt[k-]][x];
}
}
k=ts[i][s[i]-'a'];
nxt[i]=k;
}
int leno=strlen(op);
int i=lena,k=;
printf("%d\n",lena);
For(cs,,leno-) {
if(op[cs]=='-') {
if(i>lena) {
nxt[i]=;
memset(ts[i+],-,sizeof(ts[i+]));
i--;
k=nxt[i];
}
}
else {
s[++i]=op[cs];
For(x,,) {
if(x==s[k]-'a') ts[i][x]=k+;
else if(!k) ts[i][x]=k;
else {
if(x==s[nxt[k-]]-'a') ts[i][x]=nxt[k-]+;
else ts[i][x]=ts[nxt[k-]][x];
}
}
k=ts[i][op[cs]-'a'];
nxt[i]=k;
}
printf("%d\n",lena-nxt[i]);
}
Formylove;
}
/*
aaa
aaaaaaab-b-b-b-b-
*/

B 君的第三题 yinchuan

ORZ哥德巴赫猜想,我对数学一窍不通还真是对不起了。(从小从没学过数竟,初中在贫困山区的破烂学校上的,再有名我都不知道)

首先区间操作想到差分,每个点表示它和它前面一个点是否相同。现在翻转一个区间变成了翻转两个点,最终使序列全为0。

一次翻转i,j两个点的代价:

|i-j|为奇质数:1

|i-j|为偶数(根据哥德巴赫猜想,大于等于6的偶数都能拆成两个奇质数之和,2=5-3,4=7-3):2

|i-j|为奇合数:3(先变成偶数再2次操作)

那么容易发现翻转0一定不优,每次都是翻转两个1,且1的个数一定为偶数。

那么把1的位置按奇偶分类,差的绝对值为奇质数的连边,二分图匹配。剩下的左边跟左边配右边跟右边配,最多左右各剩一个就左右配。

 //Achen
#include<bits/stdc++.h>
#define For(i,a,b) for(int i=(a);i<=(b);i++)
#define Rep(i,a,b) for(int i=(a);i>=(b);i--)
#define Formylove return 0
const int N=,up=;
typedef long long LL;
typedef double db;
using namespace std;
int n,a[N],b[N],c[N],ans; template<typename T> void read(T &x) {
char ch=getchar(); x=; T f=;
while(ch!='-'&&(ch<''||ch>'')) ch=getchar();
if(ch=='-') f=-,ch=getchar();
for(;ch>=''&&ch<='';ch=getchar()) x=x*+ch-''; x*=f;
} int bo[up+],p[up+];
void get_prime() {
For(i,,up) {
if(!bo[i]) p[++p[]]=i;
for(int j=;j<=p[]&&i*p[j]<=up;j++) {
bo[i*p[j]]=;
if(i%p[j]==) break;
}
}
bo[]=bo[]=;
} void GM(LL &x,LL y) { if(x>y) x=y; } int vis[N],pr[N],mp[N][N];
int find(int x) {
For(i,,c[]) if(mp[x][i]&&!vis[i]) {
vis[i]=;
if(!pr[i]||find(pr[i])) {
pr[i]=x;
return ;
}
}
return ;
} #define ANS
int main() {
#ifdef ANS
freopen("yinchuan.in","r",stdin);
freopen("yinchuan.out","w",stdout);
#endif
read(n);
get_prime();
For(i,,n) read(a[i]);
For(i,,n) {
if(i==||a[i-]!=a[i]-) {
if(a[i]&) b[++b[]]=a[i];
else c[++c[]]=a[i];
}
if(a[i+]!=a[i]+) {
if((a[i]+)&) b[++b[]]=a[i]+;
else c[++c[]]=a[i]+;
}
}
For(i,,b[]) For(j,,c[]) {
if(!bo[abs(b[i]-c[j])]) mp[i][j]=;
}
For(i,,b[]) {
memset(vis,,sizeof(vis));
ans+=find(i);
}
if((b[]-ans)&) ans=ans+(b[]-ans)/*+(c[]-ans)/*+;
else ans=ans+(b[]-ans)+(c[]-ans);
printf("%d\n",ans);
Formylove;
}

NOIp2018集训test-10-20 (bike day6)的更多相关文章

  1. 背水一战 Windows 10 (20) - 绑定: DataContextChanged, UpdateSourceTrigger, 对绑定的数据做自定义转换

    [源码下载] 背水一战 Windows 10 (20) - 绑定: DataContextChanged, UpdateSourceTrigger, 对绑定的数据做自定义转换 作者:webabcd 介 ...

  2. (转自http://www.blogjava.net/moxie/archive/2006/10/20/76375.html)WebWork深入浅出

    (转自http://www.blogjava.net/moxie/archive/2006/10/20/76375.html) WebWork深入浅出 本文发表于<开源大本营> 作者:钱安 ...

  3. Scrum会议10.20

    Scrum会议   组名称:好好学习 项目名称:记账本 参会成员:林莉(Master)胡丽娜 汪东涵 宫丽君 时间:2016.10.20 已完成内容: 1.理解项目和代码. 2.讨论新功能. 计划完成 ...

  4. 查询数据库:models.Books.objects.all()[10: 20]与models.Books.objects.filter(id__gt=10, id__lt=20).values() 的区别

    1. models.Books.objects.all()[10: 20] (10:20  之间是冒号,不是逗号.)查出的是 QuerySet对象,如需进行操作,得进一步进行剥皮. 查询代码: 查询结 ...

  5. OSC Source Code Innovation Salon(2018.10.20)

    时间:2018.10.20地点:北京 朝阳 浦项中心B座2层

  6. 第8次Scrum会议(10/20)【欢迎来怼】

    一.小组信息 队名:欢迎来怼 小组成员 队长:田继平 成员:李圆圆,葛美义,王伟东,姜珊,邵朔,冉华 小组照片 二.开会信息 时间:2017/10/20 17:20~17:45,总计25min. 地点 ...

  7. Daily Scrum 10.20

    今天进行了团队第一次scrum meeting,在这次会议中,我们针对NABC模型以及开发前期的工作进行了探讨. 第一次会议 主要内容如下: 为了大家接下来几周的开发效率,需要共同商量团队的一些规则 ...

  8. [NOIP2018模拟赛10.16]手残报告

    [NOIP2018模拟赛10.16]手残报告 闲扯 炉石乱斗模式美滋滋啊,又颓到好晚... 上来T2先敲了树剖,看T1发现是个思博DP,然后没过大样例,写个暴力发现还是没过大样例!?才发现理解错题意了 ...

  9. NOIp2018集训test-10-18 (bike day4)

    这是一套简单题,这几天的考试让bike老爷感觉很绝望,说实话我也确实不知道还能怎么更简单了. 这几天的题换做llj.sxy应该都能轻松AK吧,至少随便考个250+应该不是问题吧,我越来越觉得觉得我跟他 ...

随机推荐

  1. 因为看见,所以发现:QBotVariant谢绝落幕

    互联网给人带来便捷的同时,其公开大量的资源也同样给恶意利用者带了便捷,越来越多公开的恶意程序源码降低了对外攻击.入侵的难度,使得安全问题愈加严重. 阿里云安全团队从今年5月份监测到一BOT家族,其样本 ...

  2. sql-主键、外键、索引

    SQL的主键和外键的作用: 外键取值规则:空值或参照的主键值. (1)插入非空值时,如果主键表中没有这个值,则不能插入. (2)更新时,不能改为主键表中没有的值. (3)删除主键表记录时,你可以在建外 ...

  3. BZOJ 1095: [ZJOI2007]Hide 捉迷藏(动态点分治)

    传送门 解题思路 点分树其实就是在点分治的基础上,把重心连起来.这样树高是\(log\)的,可以套用数据结构进行操作.这道题是求最远距离,所以每个点维护两个堆,分别表示所管辖的子树的最远距离和到父节点 ...

  4. Monkey学习

    Monkey是一个工程,生成伟随机事件流(在一段时间内完全不重复的事件流),由种子生成.可以模拟用户,点击,触屏等.最好用来做压力测试.无法做功能测试. adb shell monkey -p -v ...

  5. 并口、串口、COM口区别

          并行接口,简称并口.并口采用的是25针D形接头.所谓“并行”,是指8位数据同时通过并行线进行传送,这样数据传送速度大大提高,但并行传送的线路长度受到限制,因为长度增加,干扰就会增加,数据也 ...

  6. 利用core_pattern实现core文件的配置和管理

    参考:https://xz.aliyun.com/t/1098 这里所说的core_pattern 指的是:/proc/sys/kernel/core_pattern. 我们知道在Linux系统中,如 ...

  7. find pattern

    daniel@daniel-mint ~/msf/metasploit-framework/tools $ ruby pattern_create.rb 2000 Aa0Aa1Aa2Aa3Aa4Aa5 ...

  8. python学习笔记:操作Excle

    import xlwt #写excel import xlrd #读excel import xlutils #修改excel 一.写操作 1.写Excel import xlwt #写excel,导 ...

  9. cesium默认全屏按钮自定义

    cesium默认全屏按钮自定义 1  隐藏默认的svg 2  修改它默认的按钮边框,背景 3   修改它点击时的样式 代码如下: .cesium-viewer-fullscreenContainer ...

  10. 在webpack4 中利用Babel 7取消严格模式方法

    报错信息: Uncaught TypeError: 'caller', 'callee', and 'arguments' properties may not be accessed on stri ...