仍在施工... 给定三个正整数 \(a,b,c\),你需要求出 \(a^b\) 除以 \(c\) 并向下取整得到的值对 \(c\) 取模的结果。 大概十天之前 和 \(DrRatio\)、\(GGrun\) 玩洛谷随机跳题做过一道类似且难度大于等于这个的题,开赛没十秒, 求 \(a^b\) 显然快速幂,模什么呢,模 \(c\) 的话之后再 \(\div c\) 结果显然为 0,所以我们模 \(c^2\)。 对长度为 \(n\) 的排列 \(π=(π1,π2,…,πn)\),定义它的权值 \(wt(π)=∑_{i=1}^n∣π_i−i∣\),定义它的 k-移位为新的排列 \(πk=(πn−k+1,πn−k+2,…,πn,π1,…,πn−k)\)。特别的,\(π_0=π\)。 现在给定长度为 \(n\) 的排列 \(π\),请找到一个 \(k∈[0,n−1]\),使得 \(wt(πk)\) 最小。 $165 pts, Rank 18$
B 题挂了 45 分,不然可以 AC 两道题的,呜题目列表:
A.abc猜想
题意:
赛时分析:
GGrun:做过做过这个
,于是十分钟切了。正解:
code:
#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll a, b, c;
ll qpow(ll x, ll y, ll mod){
ll ans = 1;
while(y)
{
if(y & 1) ans = ans * x % mod;
x = x * x % mod;
y >>= 1;
}
return ans;
}
signed main(){
// freopen("in.in", "r", stdin); freopen("out.out", "w", stdout);
scanf("%lld%lld%lld", &a, &b, &c);
ll ans = qpow(a, b, c * c) / c;
ans = ans % c;
printf("%lld", ans);
return 0;
}
B.简单的排列最优化题
题意: