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. nucleus学习

    task的TCB结构: typedef struct TC_TCB_STRUCT { /* Standard thread information first. This information is ...

  2. CF1061E Politics E. Politics 解题报告

    CF1061E Politics E. Politics 考虑利用树的性质,因为是子树问题,所以放到dfs序上. 只考虑一个树,问题是每个区间选恰好\(k\)个.因为区间其实是子树,所以区间要么包含, ...

  3. 【Flutter学习】可滚动组件之ScrollView

    一,概述 ScrollView 是一个带有滚动的视图组件. 二,组成部分 ScrollView 由三部分组成: Scrollable - 它监听各种用户手势并实现滚动的交互设计.可滚动Widget都直 ...

  4. 解决handsontable日期控件汉化的问题

    在项目的 node_modules\pikaday目录下打开 pikaday.js 把 i18n: { previousMonth : 'Previous Month', nextMonth : 'N ...

  5. Linux中TLS

    TLS(Thread Local Storage) 线程局部存储. 在Linux操作系统中,TLS保存成GDT中描述的一个段. 1: /* 2: * This creates a new proces ...

  6. pandas 使用出现的问题汇总

    问题1:<bound method NDFrame.head of 刚开始还以为是自己的数据集有问题,怎么显示不对呢! 解决: 仔细观察,是自己给的输出有问题,data.head什么鬼??? 正 ...

  7. kruskal算法【最小生成树2】

    设G=(V,E)是无向连通带权图,V={1,2,…,n}: 设最小生成树T=(V,TE),该树的初始状态为只有n个顶点而无边的非连通图T=(V,{}),Kruskal算法将这n个顶点看成是n个孤立的连 ...

  8. 基于MFC的Media Player播放器的制作(1---播放器界面的布局)

    |   版权声明:本文为博主原创文章,未经博主允许不得转载. 通过上面的一些预备知识,我们现在就可以自己来制作基于MFC的播放器了,接下来我们讲的是使用MFC制作我们播放器 的界面. 首先,我们我们打 ...

  9. angularJS CDN

    http://cdn.static.runoob.com/libs/angular.js/1.4.6/angular.min.js

  10. change transformation file in PI interface

    1. Jane extends the ZTMMASKU sap table 2. Jane write the program to write the new attribute to the t ...