博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
牛客寒假算法基础集训营1 D:小a与黄金街道(欧拉函数+快速幂)+G:小a的排列(思维)
阅读量:3898 次
发布时间:2019-05-23

本文共 1244 字,大约阅读时间需要 4 分钟。

【题目】

【题解】

这种补题对我的人生没有意义。。 因为我数学是真的差。。 相信量变引起质变嗯。

【代码】

#include 
using namespace std;typedef long long ll;const int mod = 1e9+7;ll quick_pow(ll a,ll b){ ll r=1,tmp=a; while(b) { if(b&1) r=r*tmp%mod; tmp=tmp*tmp%mod; b>>=1; } return r%mod;}ll Eular(ll n){ ll res=n; for(ll i=2;i*i<=n;i++) { if(n%i==0) res=res/i*(i-1); while(n%i==0) n/=i; } if(n>1) res=res/n*(n-1); return res;}int main(){ ll n,k,a,b; cin>>n>>k>>a>>b; ll sum=n*Eular(n)/2; cout<<(a+b)*quick_pow(k,sum)%mod<

【题目】

【题解】

定义一段区间是"萌"的,当且仅当把区间中各个数排序后相邻元素的差为1。

易得,包括x和y的萌区间长度最小为abs(x的下标-y的下标)+1。我们可以从这个最小的区间入手,根据已确定区间内的最大值和最小值作为范围确定符合条件的值的位置,从而一点点扩大区间直至成为‘萌’区间为止。

 

【代码】

#include 
using namespace std;int main(){ int n,x,y; scanf("%d%d%d",&n,&x,&y); int a[100005],l,r; for(int i=1;i<=n;i++) { scanf("%d",&a[i]); if(a[i]==x) l=i; else if(a[i]==y) r=i; } if(l>r) swap(l,r); int xx=0,yy=n+1; while(xx-yy!=r-l) { for(int i=l;i<=r;i++) xx=max(xx,a[i]),yy=min(yy,a[i]); for(int i=1;i<=n;i++) { if(a[i]>yy&&a[i]
yy&&a[i]
r) r=i; } } printf("%d %d\n",l,r); return 0;}

 

转载地址:http://qfben.baihongyu.com/

你可能感兴趣的文章
VC的字符串转换atlconv的使用
查看>>
Twitter的分布式自增ID算法snowflake (Java版)
查看>>
CentOS7 安装配置FastDFS
查看>>
递归算法的时间复杂度
查看>>
数据结构之图(存储结构、遍历)
查看>>
使用sizeof计算类的大小
查看>>
乐观锁与悲观锁——解决并发问题
查看>>
operator 类型转换及重载
查看>>
HTTP状态码
查看>>
TCP/IP详解--举例明白发送/接收缓冲区、滑动窗口协议之间的关系
查看>>
TCP/IP详解--再次深入理解TCP网络编程中的send和recv
查看>>
TCP与UDP收发的时候TCP有缓冲区还是UDP有缓冲区,使用它们时该注意什么?
查看>>
C++中map、hash_map、unordered_map、unordered_set通俗辨析
查看>>
clone的fork与pthread_create创建线程有何不同&pthread多线程编程的学习小结
查看>>
运算符重载参数的顺序对运算是否有影响
查看>>
什么时候要用虚析构函数?
查看>>
序列化、反序列化与jsoncpp学习
查看>>
同步/异步与阻塞非阻塞的关系
查看>>
epoll模型讲解/源码分析
查看>>
ELF格式与bss段
查看>>