CF gym 10326040th Petrozavodsk Programming Camp, Day 5,2021.2.3 水题2题
Posted 小哈里
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CF gym 10326040th Petrozavodsk Programming Camp, Day 5,2021.2.3 水题2题相关的知识,希望对你有一定的参考价值。
M、Discrete Logarithm is a Joke
题意:
思路:
- 不难想到an=g^{an+1},因为样例给了 a[1000000]的值,所以反着推就行了。
- 记得开int128,longlong会爆,也不要用浮点数表示整数,double会爆,提交的时候选G++20,不然编译器会爆。
#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e6+10;
typedef __int128 LL;
inline __int128 read(){
__int128 x=0,f=1;
char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
return x*f;
}
inline void print(__int128 x){
if(x<0){putchar('-');x=-x;}
if(x>9)print(x/10);
putchar(x%10+'0');
}
//const LL mod = 1e18+31;//WA
const LL mod = 1000000000000000031;//M 题别用浮点数表示整数
LL pows(LL a, LL x, LL p){ if(x==0)return 1; LL t = pows(a, x>>1,p);if(x%2==0)return t*t%p;return t*t%p*a%p;}
LL f[maxn];
int main(){
int n = 1000000;
f[n] = 300;
for(int i = n-1; i >= 0; i--){
f[i] = pows(42LL,f[i+1],mod);
}
int x; cin>>x;
print(f[x]);
return 0;
}
/*
M = 1e18+31;
g = 42 是原根
[1,φ(M)],φ(M)=1e18+30,[1,1e18+30]
g^i, if gcd(i,φ(M))=1, i是原根,,即g^i同余1(mod M)
f(x)是下一个原根?
所以an = g^f(an)?
an = g^a[n+1]?
f(x)是
g^f(x)同余x(mod M),
f(0) = a[0] = 960002411612632915;
a[1] = f(a[0]);
g^a[1]同余a[0] (mod M)
g^a[2]同余a[1] (mod M)
*/
J、Increasing or Decreasing
题意:
- 给出两个长为n的排列,求构造一组操作次数不超过n次的方案让排列A变为排列B。
- 每次操作可以选定一个区间[l, r]给其升序或降序排序。
思路:
- 盲猜肯定需要n次,一次确定一个位置。所以想到先把1-n升序排序,然后从后往前枚举B序列,每次找到B[i]在A中的位置l,把l到当前B中未确定的r按照升序或降序排序后,B[i]就被放到了正确的位置。
- 因为A数组每次都是对后缀进行升序或降序排序的,所以找到的那个A中的B[i],一定是他所在位置到B未确定的数的末位中的最大值或最小值,因为那一段都是单调的。
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int maxn = 550;
int a[maxn], b[maxn];
bool cmp(int x, int y){
return x>y;
}
int main(){
int n; cin>>n;
for(int i = 1; i <= n; i++)cin>>a[i];
for(int i = 1; i <= n; i++)cin>>b[i];
cout<<n<<"\\n";
cout<<1<<" "<<n<<" "<<"I\\n";
sort(a+1,a+n+1);
for(int i = n; i >= 2; i--){
int t = b[i];
int l, r=i;
for(int j = i; j >= 1; j--){
if(a[j]==t){
l = j;
break;
}
}
///if(l==r)continue;
if(a[l]>a[r]){
sort(a+l,a+r+1);
cout<<l<<" "<<r<<" "<<"I\\n";
}else{
sort(a+l,a+r+1,cmp);
cout<<l<<" "<<r<<" "<<"D\\n";
}
//for(int i = 1; i <= n; i++)cout<<a[i]<<" ";cout<<"\\n";
}
//for(int i = 1; i <= n; i++)cout<<a[i]<<" ";cout<<"\\n";
return 0;
}
以上是关于CF gym 10326040th Petrozavodsk Programming Camp, Day 5,2021.2.3 水题2题的主要内容,如果未能解决你的问题,请参考以下文章
cf gym gym 101177 A - Anticlockwise Motion
cf gym 100960 G. Youngling Tournament set+树状数组