杭州网站关键词,怎么制作游戏短视频,个人营业执照怎么申请,网络营销岗位技能牛客练习赛75 D 减数游戏 思路:写一下式子可以发每次选择最小的两个数进行操作#xff0c;最后得到的答案会是最大的#xff0c;那我们可以将它放进一个最小堆中来维护#xff0c;但是里面的数是需要取模的#xff0c;当它取模的时候#xff0c;将会变小。那我们可以用一…牛客练习赛75 D 减数游戏 思路:写一下式子可以发每次选择最小的两个数进行操作最后得到的答案会是最大的那我们可以将它放进一个最小堆中来维护但是里面的数是需要取模的当它取模的时候将会变小。那我们可以用一个队列来维护当它超过mod的时候就将它放入队列中因为是从最小堆中出来的所以队列中后面的数必然会大于前面的数然后在队列中循环操作就可以了。
代码:
#include iostream
#include cstdio
#include fstream
#include algorithm
#include cmath
#include deque
#include vector
#include queue
#include string
#include cstring
#include map
#include stack
#include set
#include cstdlib
#define INF 0x3f3f3f3f3f3f3f3f
#define inf 0x3f3f3f3f
#define FILL(a,b) (memset(a,b,sizeof(a)))
#define re register
#define lson rt1
#define rson rt1|1
#define lowbit(a) ((a)-(a))
#define ios std::ios::sync_with_stdio(false);std::cin.tie(0);std::cout.tie(0);
#define fi first
#define rep(i,n) for(int i0;(i)(n);i)
#define rep1(i,n) for(int i1;(i)(n);i)
#define se second
#define scd(a) scanf(%d,a)
#define scdd(a,b) scanf(%d%d,a,b)
#define scddd(a,b,c) scanf(%d%d%d,a,b,c)
#define ac coutans\n
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pairll,ll pii;
int dx[4] {-1,1,0,0},dy[4] {0,0,1,-1};
const ll mod1e97;
const ll N 1e610;
const double eps 1e-4;
//const double piacos(-1);
ll gcd(ll a,ll b){return !b?a:gcd(b,a%b);}
ll qk(ll a,ll b){ll ans1;while(b){if(b1) ansans*a%mod;b1;aa*a%mod;}return ans;
}
ll n,k;
ll p[N],hh0,tt0;
void sovle(){priority_queuell,vectorll,greaterll q;cinnk;for(int i1;in;i){ll x;cinx;q.push(x);}queuell w,w2;while(q.size()1){ll t1q.top();q.pop();ll t2q.top();q.pop();ll k1(t1*t2k);if(k1mod) p[tt]k1%mod;else q.push(k1);}if(q.size()){p[--hh]q.top();}while(hhtt-1){ll t1p[hh];ll t2p[hh];w2.push((t1*t2k)%mod);}coutp[hh]%mod;
}
int main()
{iosint t1;// cint;while(t--){sovle();}return 0;
}