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. Windows Server服务器之介绍及版本信息

    Windows Server是Microsoft Windows Server System(WSS)的核心,Windows的服务器操作系统.每个Windows Server都与其家用(工作站)版对应 ...

  2. Tomcat集群搭建超详细(apache+mod_jk+tomcat)

    TOMCAT集群 目录 TOMCAT集群 1 1 集群 1 1.1 什么是集群 1 1.2 集群的特性 1 1.3 集群的分类 1 1.4 TOMCAT集群配置的优缺点 2 1.5 APACHE+TO ...

  3. 为什么NULL能多次free

    void __cdecl _free_base (void * pBlock) {           int retval = 0;             if (pBlock == NULL) ...

  4. 用scp实现多服务器文件分发

    需要安装expect环境 yum install expect -y vi ip.txt #主机地址池 192.168.1.1 192.168.1.2 192.168.3.3 #如果是同一网段也可以不 ...

  5. 2019浙江省赛 Strings in the Pocket【manacher】

    Strings in the Pocket 题目链接 http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=6012 题意 给你两个字符 ...

  6. c# dotNetBar symbol属性代码动态设置方法

    C#: button.Symbol = "\uf060"; VB: button.Symbol = ChrW("&Hf060") Since we in ...

  7. 关于JS递归函数求斐波那契数列两种实现方法

    百度已经解释的很详细了,但是不写注释还真是看不懂,递归,就直接套公式了,for循坏,我们就用EXCEL看一下规律 可以看到B是A+B的和,A往后就是B的值,所以我们需要第三个变量来保存他们的和,取出B ...

  8. redis(集群一)主从复制

    1.主从复制原理 主从复制工作流程 从服务器连接主服务器,发送SYNC命令. 主服务器接收到SYNC命令后,开始执行bgsave命令生成RDB文件并使用缓冲区记录此后执行的所有命令 主服务器bgsav ...

  9. Vue--入门篇

    一.v-model和单选按钮(radio) <div id="app"> <input name="sex" value="男&qu ...

  10. 2018-10-19-C#-GUID-ToString-

    title author date CreateTime categories C# GUID ToString lindexi 2018-10-19 9:4:44 +0800 2018-4-1 10 ...