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南京网络赛的更多相关文章

  1. 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 ...

  2. 2019icpc南京网络赛_F_Greedy Sequence

    题意 题意不明,队友告诉我对于每个\(i\),所在下标\(p[i]\),在\([p[i]-k,p[i]+k]\)中找到小于\(i\)的最大数\(x\),然后\(ans[i]=ans[x]+1\)即可. ...

  3. 2019ICPC南京网络赛B super_log——扩展欧拉定理

    题目 设函数 $$log_a*(x) = \begin{cases}-1, & \text{ if } x < 1 \\ 1+log_a*(log_ax) & \text{ if ...

  4. 2019icpc南京网络赛 A 主席树

    题意 给一个\(n\times n\)的螺旋矩阵,给出其中的\(m\)个点的值分别为各个点上数字的数位之和,给出\(q\)个询问,每次询问从\((x1,y1)\)到\((x2,y2)\)的子矩阵的和. ...

  5. 2019icpc南京网络赛 F 主席树

    题意 给一个\(n\)的全排列数组\(a\),求一个递推数组每一项的值:\(ans[i]=ans[j]+1\),\(j\)为\(a[pos[i]-k]到a[pos[i]+k],(pos[i]为i在数组 ...

  6. 2019ICPC南京网络赛总结

    这次是在学校打的,总体不算好,过两题校排200多..很惨. 开场一段时间没人过题,但是很多人交I, 我也就再看,看着看着发现不可做,这时候转F,花了半天读懂题意的时候想到主席树查找.但是主席树这种查找 ...

  7. 2019ICPC南京网络赛F Greedy Sequence

    题意:对于1<=i<=n每次找到(pos[i]-k,pos[i]+k)内不大于i的最大那个数,ans[i]=ans[mx]+1,若ans[mx]未知则递归处理ans[mx] PS:这个题比 ...

  8. 2019ICPC南京网络赛A The beautiful values of the palace

    题意:蛇形填数超大版本,需要求出一些给定坐标的值的数位和,然后q次询问,一个矩形区域内值的和是多少 解题思路:二维偏序前缀和的经典题 二维偏序:求(x,y)左下角点的个数,思路是对x,y升序排序,用树 ...

  9. 2019ICPC南京网络赛B super_log

    题意:求a的a的a次方..一直求b次,也就是在纸上写个a,然后一直a次方a次方,对m取模,记为F(a,b,m)=pow(a,F(a,b-1,phi(m)) 解题思路:联系欧拉降幂,这个迭代的过程,我们 ...

随机推荐

  1. BZOJ 2165: 大楼 倍增Floyd

    卡了一上午常数,本地13s,可是bzoj 就是过不去~ #include <bits/stdc++.h> #define N 102 #define M 55 #define ll lon ...

  2. POJ - 3376 Finding Palindromes manacher+字典树

    题意 给n个字符串,两两拼接,问拼接后的\(n\times n\)个字符串中有多少个回文串. 分析 将所有正串插入字典树中,马拉车跑出所有串哪些前缀和后缀为回文串,记录位置,用反串去字典树中查询,两字 ...

  3. CodeForces 754C Vladik and chat ——(xjbg)

    虽然是xjbg的题目,但是并不很好做. 题意不难理解.读入有点麻烦.做法是先正着推每段对话的?可能是谁说的,然后反过来选择即可.正推时,其中vis数组表示谁已经被用过了,cnt表示该组当前可以选择几个 ...

  4. HDU 3394 Railway —— (点双联通,记录块信息)

    这题是比较模板的找点双联通并记录的题目. 题意大概是:一个公园有n个景点,1.所有游客都是绕环旅游的,找出所有不在环内的路的条数:2.如果两个环中有重复的边,那么这些边是冲突的,问冲突的边的总数. 分 ...

  5. jsp页面,使用Struts2标签,传递和获取Action类里的参数,注意事项。<s:a action><s:iterator><s:param>ognl表达式

    在编写SSH2项目的时候,除了使用<s:form>表单标签向Action类跳转并传递参数之外,很更多时候还需要用到<s:a action="XXX.action" ...

  6. DS博客作业07——查找

    1.本周学习总结 1.1思维导图 1.2.谈谈你对查找运算的认识及学习体会. 查找的内容和前两章树和图相比,要简单许多,在二次搜索树虽然也要用到树,但是也是很简单的树的操作,再加上查找的代码可以使用m ...

  7. LeetCode 132. 分割回文串 II(Palindrome Partitioning II)

    题目描述 给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串. 返回符合要求的最少分割次数. 示例: 输入: "aab" 输出: 1 解释: 进行一次分割就可将 s ...

  8. Java 比较两个字符串的相似度算法(Levenshtein Distance)

    转载自: https://blog.csdn.net/JavaReact/article/details/82144732 算法简介: Levenshtein Distance,又称编辑距离,指的是两 ...

  9. OpenCV中出现“Microsoft C++ 异常: cv::Exception,位于内存位置 0x0000005C8ECFFA80 处。”的异常

    对于OpenCV的安装 要感谢网友空晴拜小白提供的教程 链接如下: https://blog.csdn.net/sinat_36264666/article/details/73135823?ref= ...

  10. SpringCloud(1)----基于RestTemplate微服务项目

    在写SpringCloud搭建微服务之前,我想先搭建一个不通过springcloud只通过SpringBoot和Mybatis进行模块之间额通讯.然后在此基础上再添加SpringCloud框架. 下面 ...