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. CDN(Content Delivery Network)内容分发网络

    CDN的全称是Content Delivery Network,即内容分发网络.其基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快.更稳定.通过在网络各处放置节 ...

  2. IE11“__doPostBack”未定义”

    IE 11 下<asp:LinkButton> 点击出现 “__doPostBack”未定义” 在项目根目录 App_Browsers 下新建 浏览器文件(.browser),让其与IE1 ...

  3. Hive HiveQL基础知识及常用语句总结

    基础语句 CREATE DROP 建表.删表 建表 -------------------------------------- -- 1. 直接建表 ------------------------ ...

  4. 搭建Linux C语言开发环境

    1.操作系统 Windows操作系统:windows 7 and windows 10 2.开发工具和编译工具 开发工具:notpad++ 和 vim 编译工具:Cygwin64 Terminal 3 ...

  5. 数据库的基本使用(C#语言)

    目录 insert select 的使用 delete update 更新 Like模糊查询 Order 排序 GETDATA() 聚合函数:MAX,MIN,AVG,SUM,COUNT Max COU ...

  6. 中国HBase技术社区第一届Meetup资料大合集

    2018年6月6号,由中国HBase技术社区组织,阿里云主办的中国第一次HBase Meetup在北京望京阿里中心举行,来自阿里.小米.滴滴.360等公司的各位HBase的PMC.committer共 ...

  7. 打开myeclipse出现这个错是为什么

  8. spark sql数据源--hive

    使用的是idea编辑器 spark sql从hive中读取数据的步骤:1.引入hive的jar包 2.将hive-site.xml放到resource下 3.spark sql声明对hive的支持 案 ...

  9. FZU 2079 最大获利(线段树+DP)

    Description Sean准备投资一些项目.有n个投资项目,投资第i个项目需要花费Ci元.Sean发现如果投资了某些编号连续的项目就能赚得一定的钱.现在给出m组连续的项目和每组能赚得的钱,请问采 ...

  10. SQL Server 2014 中新建登录及权限分配【界面版】

    本篇经验将和大家介绍分配SQL Server 2014 中,新建登录用户,分配权限,并指定该用户的数据库的方法,希望对大家的工作和学习有所帮助! 方法/步骤 1 打开 MS SQL Server Ma ...