AtCoder Grand Contest 044
作者:互联网
题外话,昨天我写的题解被电脑重启还原卡搞没了
A - Pay to Win
题意:简单来说 题意就是 给一个N 然后给了4种操作的代价 求最小的代价。
sol.可以发现,对于每一次操作,如果要进行乘除法操作,那么肯定应该不留余数
那么只要对 数进行上下取证考虑就好了
#include<bits/stdc++.h>
typedef long long ll;
#define INF 0x7fffffffffffffff
using namespace std;
ll T,n,a[5],p[5] = {2 , 3 , 5},D;
map<ll , ll>judge;
ll f(ll x){
if(judge.count(x))return judge[x];
ll zz = INF;
ll L,R;
for(int i = 0 ; i < 3 ; i++){
L = (x / p[i]) * p[i];
R = ((x + p[i] - 1ll) / p[i]) * p[i];
zz = min(zz , f(L / p[i]) + abs(x - L) * D + a[i]);
zz = min(zz , f(R / p[i]) + abs(R - x) * D + a[i]);
}
if(x < zz / D)zz = x * D;
judge[x] = zz;
return zz;
}
int main(){
scanf("%lld" , &T);
while(T--){
judge.clear();
scanf("%lld%lld%lld%lld%lld" , &n , &a[0] , &a[1] , &a[2] , &D);
judge[0] = 0 , judge[1] = D;
cout<<f(n)<<endl;
}
}
B - Joker
题意:在\(n\times n的矩阵里面\),有一个 人依次出来的顺序,要求每次出来的人 经过已经有人的格子的个数尽量少,问总和
sol.发现你bfs的过程,答案是一个单调的,每次bfs直接继承就好了
C - Strange Dance
题意:给你\(0-->3^n-1\)的排列,有两种操作,
1> 将排列的每一个数3进制下,1转变为2,2转变为1,
2> 每一个数 + 1 , 且\(mod\ 3^n\)
问最后整个序列的每一个元素的值
sol.直接建一个(0/1/2 trie)就好了,好像还是联合省选原题,zroi原题
标签:AtCoder,题意,Contest,ll,sol,lld%,zz,judge,044 来源: https://www.cnblogs.com/Yeyuqing0913/p/15514669.html