2019icpc南京网络赛
B. super_log(扩展欧拉函数)
题意:求aa...(b个a)模M的值。
思路:递归用欧拉函数求解,我们知道欧拉降幂公式:

如果讨论b和φ(p)的关系会很麻烦,网上证明了一种精妙的方法,只需重新Mod,就能把a和p当作互素处理,从而统一处理。
要注意的点是:快速幂中取模也要用重写的Mod,最终的答案要%M,递归终点为b=0,如果终点为b=1时,当b=0会WA。
AC代码:
#include<cstdio>
#include<algorithm>
#include<bitset>
using namespace std; typedef long long LL;
const int maxn=1e6+;
int T;
LL a,b,M,eu[maxn]; void eular(){
eu[]=;
for(int i=;i<maxn;++i)
if(!eu[i])
for(int j=i;j<maxn;j+=i){
if(!eu[j]) eu[j]=j;
eu[j]=eu[j]/i*(i-);
}
} LL Mod(LL x,LL M){
return x<M?x:x%M+M;
} LL qpow(LL a,LL b,LL M){
LL ret=;
while(b){
if(b&) ret=Mod(ret*a,M);
a=Mod(a*a,M);
b>>=;
}
return ret;
} LL dfs(LL b,LL M){
if(b==) return Mod(,M);
if(M==) return Mod(a,M);
return qpow(a,dfs(b-,eu[M]),M);
} int main(){
eular();
scanf("%d",&T);
while(T--){
scanf("%lld%lld%lld",&a,&b,&M);
printf("%lld\n",dfs(b,M)%M);
}
return ;
}
H. Holy Grail(Floyd求最短路)
题意:给定一个图,没有多重边和自回路,有负权边,但没有负权环。n个点,m条有向边,n<=300,m<=500,现加入6条边,使得加入的边权最小,并且不会出现负权环。并且保证一定有解。
思路:
因为保证一定有解,如果加入的边为(u,v),那么原图一定有一条v->u的路径。所以我们用floyd求出各点之前的最短路即可,那么新加的边的最小权值就是v到u的最短路的相反数。新加一条边后重新floyd。
AC代码:
#include<cstdio>
#include<algorithm>
using namespace std; typedef long long LL;
const int maxn=;
const LL inf=0x3f3f3f3f3f3f3f3f;
int T,n,m;
LL dp[maxn][maxn]; void floyd(){
for(int k=;k<=n;++k)
for(int i=;i<=n;++i)
for(int j=;j<=n;++j)
dp[i][j]=min(dp[i][j],dp[i][k]+dp[k][j]);
} int main(){
scanf("%d",&T);
while(T--){
scanf("%d%d",&n,&m);
for(int i=;i<=n;++i)
for(int j=;j<=n;++j)
dp[i][j]=inf;
for(int i=;i<=m;++i){
int x,y;LL w;
scanf("%d%d%lld",&x,&y,&w);
dp[++x][++y]=w;
}
for(int i=;i<=;++i){
floyd();
int x,y;
scanf("%d%d",&x,&y);
++x,++y;
printf("%lld\n",-1LL*dp[y][x]);
dp[x][y]=-1LL*dp[y][x];
}
}
return ;
}
F. Greedy Sequence(暴力)
题意:化简之后题意就是对于给定排列,求元素i向左向右扩展k个元素后的第一个比i小的元素。
思路:
最开始以为是单调队列扩展,后来发现单调队列没法做。后来让队友试了一发主席树,T了。然后我想用set试一试,用set加入窗口大小为k的所有元素,每次求出第一个比它小的元素,顺序求一次,逆序再求一次。抱着T的心态交了一发,竟然过了QAQ,激动坏了,数据也太水了,暴力都能过。
AC代码:
#include<cstdio>
#include<algorithm>
#include<set>
#include<cctype>
using namespace std; inline int read()
{
int x=,f=; char ch=;
while(!isdigit(ch)) {f|=ch=='-';ch=getchar();}
while(isdigit(ch)) x=(x<<)+(x<<)+(ch^),ch=getchar();
return f?-x:x;
} const int maxn=1e5+;
int T,n,k,a[maxn],id[maxn],b[maxn],ans[maxn];
set<int> st; int main(){
scanf("%d",&T);
while(T--){
st.clear();
scanf("%d%d",&n,&k);
for(int i=;i<=n;++i){
a[i]=read();
id[a[i]]=i;
b[i]=;
}
st.insert(a[]);
for(int i=;i<=n;++i){
st.insert(a[i]);
if(i-k->) st.erase(a[i-k-]);
if(*(st.begin())==a[i]) continue;
set<int>::iterator it=st.find(a[i]);
--it;
b[i]=max(b[i],*it);
}
st.clear();
st.insert(a[n]);
for(int i=n-;i>=;--i){
st.insert(a[i]);
if(i+k+<=n) st.erase(a[i+k+]);
if(*(st.begin())==a[i]) continue;
set<int>::iterator it=st.find(a[i]);
--it;
b[i]=max(b[i],*it);
}
for(int i=;i<=n;++i)
if(b[id[i]]==) ans[i]=;
else ans[i]=ans[b[id[i]]]+;
for(int i=;i<=n;++i){
printf("%d",ans[i]);
if(i!=n) printf(" ");
}
printf("\n");
}
return ;
}
2019icpc南京网络赛的更多相关文章
- 2019ICPC南京网络赛A题 The beautiful values of the palace(三维偏序)
2019ICPC南京网络赛A题 The beautiful values of the palace https://nanti.jisuanke.com/t/41298 Here is a squa ...
- 2019icpc南京网络赛_F_Greedy Sequence
题意 题意不明,队友告诉我对于每个\(i\),所在下标\(p[i]\),在\([p[i]-k,p[i]+k]\)中找到小于\(i\)的最大数\(x\),然后\(ans[i]=ans[x]+1\)即可. ...
- 2019ICPC南京网络赛B super_log——扩展欧拉定理
题目 设函数 $$log_a*(x) = \begin{cases}-1, & \text{ if } x < 1 \\ 1+log_a*(log_ax) & \text{ if ...
- 2019icpc南京网络赛 A 主席树
题意 给一个\(n\times n\)的螺旋矩阵,给出其中的\(m\)个点的值分别为各个点上数字的数位之和,给出\(q\)个询问,每次询问从\((x1,y1)\)到\((x2,y2)\)的子矩阵的和. ...
- 2019icpc南京网络赛 F 主席树
题意 给一个\(n\)的全排列数组\(a\),求一个递推数组每一项的值:\(ans[i]=ans[j]+1\),\(j\)为\(a[pos[i]-k]到a[pos[i]+k],(pos[i]为i在数组 ...
- 2019ICPC南京网络赛总结
这次是在学校打的,总体不算好,过两题校排200多..很惨. 开场一段时间没人过题,但是很多人交I, 我也就再看,看着看着发现不可做,这时候转F,花了半天读懂题意的时候想到主席树查找.但是主席树这种查找 ...
- 2019ICPC南京网络赛F Greedy Sequence
题意:对于1<=i<=n每次找到(pos[i]-k,pos[i]+k)内不大于i的最大那个数,ans[i]=ans[mx]+1,若ans[mx]未知则递归处理ans[mx] PS:这个题比 ...
- 2019ICPC南京网络赛A The beautiful values of the palace
题意:蛇形填数超大版本,需要求出一些给定坐标的值的数位和,然后q次询问,一个矩形区域内值的和是多少 解题思路:二维偏序前缀和的经典题 二维偏序:求(x,y)左下角点的个数,思路是对x,y升序排序,用树 ...
- 2019ICPC南京网络赛B super_log
题意:求a的a的a次方..一直求b次,也就是在纸上写个a,然后一直a次方a次方,对m取模,记为F(a,b,m)=pow(a,F(a,b-1,phi(m)) 解题思路:联系欧拉降幂,这个迭代的过程,我们 ...
随机推荐
- React-router的使用:标签跳转和编程式跳转
目录: 1.demo:NavLink 标签跳转 2.标签渲染路由组件时,获取url参数 3.编程式跳转 参考文档 1)https://reacttraining.com/react-router/we ...
- .NET大文件分片上传
需求:项目要支持大文件上传功能,经过讨论,初步将文件上传大小控制在500M内,因此自己需要在项目中进行文件上传部分的调整和配置,自己将大小都以501M来进行限制. 第一步: 前端修改 由于项目使用的是 ...
- Linux下 Nginx 启动 重启 关闭
命令 nginx -s reload :修改配置后重新加载生效 nginx -s reopen :重新打开日志文件 nginx -t -c /path/to/nginx.conf 测试nginx配置文 ...
- thinkphp6下载安装与配置图文详细讲解教程(composer下载安装)
thinkphp6发布也有一段时间了,相对来说比较稳定,是时候学习一下thinkphp6框架,提前学习,到正式发布的时候,可以直接拿来做正式的项目,先人一步.thinkPHP6.0在5.1的基础上对底 ...
- BZOJ1070: [SCOI2007]修车(最小费用最大流,思维)
Description 同一时刻有N位车主带着他们的爱车来到了汽车维修中心.维修中心共有M位技术人员,不同的技术人员对不同 的车进行维修所用的时间是不同的.现在需要安排这M位技术人员所维修的车及顺序, ...
- Nginx-HTTP之静态网页访问流程分析一
假设访问静态网页的配置如下: worker_processes 1; error_log stderr debug; daemon off; master_process on; events { w ...
- 梯度提升树GBDT总结
提升树的学习优化过程中,损失函数平方损失和指数损失时候,每一步优化相对简单,但对于一般损失函数优化的问题,Freidman提出了Gradient Boosting算法,其利用了损失函数的负梯度在当前模 ...
- known
邻接表 https://blog.csdn.net/Violet_ljp/article/details/80556460 Dijkstra 算法实现原理 https://www.jianshu.co ...
- JVM 内存溢出(转载~)
对于JVM的内存写过的文章已经有点多了,而且有点烂了,不过说那么多大多数在解决OOM的情况,于此,本文就只阐述这个内容,携带一些分析和理解和部分扩展内容,也就是JVM宕机中的一些问题,OK,下面说下O ...
- vlc 详细使用方法:libvlc_media_add_option 函数中的参数设置
vlc 详细使用方法:libvlc_media_add_option 函数中的参数设置 [转载自]tinyle的专栏 [原文链接地址]http://blog.csdn.net/myaccella/ar ...