NOIp2018集训test-10-20 (bike day6)
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)的更多相关文章
- 背水一战 Windows 10 (20) - 绑定: DataContextChanged, UpdateSourceTrigger, 对绑定的数据做自定义转换
[源码下载] 背水一战 Windows 10 (20) - 绑定: DataContextChanged, UpdateSourceTrigger, 对绑定的数据做自定义转换 作者:webabcd 介 ...
- (转自http://www.blogjava.net/moxie/archive/2006/10/20/76375.html)WebWork深入浅出
(转自http://www.blogjava.net/moxie/archive/2006/10/20/76375.html) WebWork深入浅出 本文发表于<开源大本营> 作者:钱安 ...
- Scrum会议10.20
Scrum会议 组名称:好好学习 项目名称:记账本 参会成员:林莉(Master)胡丽娜 汪东涵 宫丽君 时间:2016.10.20 已完成内容: 1.理解项目和代码. 2.讨论新功能. 计划完成 ...
- 查询数据库: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对象,如需进行操作,得进一步进行剥皮. 查询代码: 查询结 ...
- OSC Source Code Innovation Salon(2018.10.20)
时间:2018.10.20地点:北京 朝阳 浦项中心B座2层
- 第8次Scrum会议(10/20)【欢迎来怼】
一.小组信息 队名:欢迎来怼 小组成员 队长:田继平 成员:李圆圆,葛美义,王伟东,姜珊,邵朔,冉华 小组照片 二.开会信息 时间:2017/10/20 17:20~17:45,总计25min. 地点 ...
- Daily Scrum 10.20
今天进行了团队第一次scrum meeting,在这次会议中,我们针对NABC模型以及开发前期的工作进行了探讨. 第一次会议 主要内容如下: 为了大家接下来几周的开发效率,需要共同商量团队的一些规则 ...
- [NOIP2018模拟赛10.16]手残报告
[NOIP2018模拟赛10.16]手残报告 闲扯 炉石乱斗模式美滋滋啊,又颓到好晚... 上来T2先敲了树剖,看T1发现是个思博DP,然后没过大样例,写个暴力发现还是没过大样例!?才发现理解错题意了 ...
- NOIp2018集训test-10-18 (bike day4)
这是一套简单题,这几天的考试让bike老爷感觉很绝望,说实话我也确实不知道还能怎么更简单了. 这几天的题换做llj.sxy应该都能轻松AK吧,至少随便考个250+应该不是问题吧,我越来越觉得觉得我跟他 ...
随机推荐
- Python--前端基础之JavaScript(JS的引入方式,JS的变量、常量和标识符,JS的数据类型,运算符,流程控制,JavaScript的对象)
JavaScript介绍 JavaScript是运行在浏览器端的脚步语言,JavaScript主要解决的是前端与用户交互的问题,包括使用交互与数据交互. JavaScript是浏览器解释执行的,前端脚 ...
- 分布式存储Ceph之PG状态详解
https://www.jianshu.com/p/36c2d5682d87 1. PG介绍 继上次分享的<Ceph介绍及原理架构分享>,这次主要来分享Ceph中的PG各种状态详解,PG是 ...
- POJ 2387 Til the Cows Come Home (dijkstra模板题)
Description Bessie is out in the field and wants to get back to the barn to get as much sleep as pos ...
- 自己总结的CSS3中transform变换、transition过渡、animation动画的基本用法
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8&quo ...
- [jzoj5840]Miner 题解(欧拉路)
首先考虑第一问.每个联通块的情况是相对独立的,所以可以分别求每个联通块的答案.无向图中存在欧拉路的条件是奇点数为0或2,那么合法方案肯定是tp到一个奇点,通过一条欧拉路到另一个奇点,再tp到另一个奇点 ...
- JS 常用字符串,数组操作
JavaScript String/Array对象 JS String对象 String 对象属性 属性 描述 constructor 对创建该对象的函数的引用 length 字符串的长度 pro ...
- %matplotlib inline 被注释掉后,pycharm不能生成图
目录 问题描述 解决方案 @ 问题描述 在 jupyter 编译器中 程序的开头,有这么一行 %matplotlib inline import numpy as np import matplotl ...
- 3. Node_export安装部署
首先我们要知道什么是Node_export?因为Prometheus本身不具备监控功能,我们要通过Prometheus收集数据,需要安装对应的export.如Node_export用于监控服务器状态, ...
- GDB can't continue if no space left
[root@premta ~]# df -hFilesystem Size Used Avail Use% Mounted on/dev/sda3 36G 36G 0 100% /tmpfs 1.5G ...
- java中多态的要点
多态有三要素 继承.方法重写.父类引用指向子类对象 多态可以理解成两个部分:一个是编译时,一个是运行时 编译时:定义规则:运行时:具体实现这个规则. 编译时:把父类强制转换成子类不会报错:运行时:先去 ...