【题目】
【题解】
这种补题对我的人生没有意义。。 因为我数学是真的差。。 相信量变引起质变嗯。
【代码】
#include <bits/stdc++.h>
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<<endl;
return 0;
}
【题目】
【题解】
定义一段区间是"萌"的,当且仅当把区间中各个数排序后相邻元素的差为1。
易得,包括x和y的萌区间长度最小为abs(x的下标-y的下标)+1。我们可以从这个最小的区间入手,根据已确定区间内的最大值和最小值作为范围确定符合条件的值的位置,从而一点点扩大区间直至成为‘萌’区间为止。
【代码】
#include <bits/stdc++.h>
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]<xx&&i<l) l=i;
if(a[i]>yy&&a[i]<xx&&i>r) r=i;
}
}
printf("%d %d\n",l,r);
return 0;
}