博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Codeforces 992 范围内GCD,LCM要求找一对数 衣柜裙子期望
阅读量:5334 次
发布时间:2019-06-15

本文共 5938 字,大约阅读时间需要 19 分钟。

A

/*Huyyt*/#include
#define mem(a,b) memset(a,b,sizeof(a))using namespace std;typedef long long ll;typedef unsigned long long ull;const int dir[8][2] = {
{
0, 1}, {
1, 0}, {
0, -1}, { -1, 0}, {
1, 1}, {
1, -1}, { -1, -1}, { -1, 1}};const int mod = 1e9 + 7, gakki = 5 + 2 + 1 + 19880611 + 1e9;const int MAXN = 2e5 + 5, MAXM = 2e5 + 5, N = 2e5 + 5;const int MAXQ = 100010;/*int to[MAXM << 1], nxt[MAXM << 1], Head[MAXN], tot = 1;inline void addedge(int u, int v){ to[++tot] = v; nxt[tot] = Head[u]; Head[u] = tot;}*/inline void read(int &v){ v = 0; char c = 0; int p = 1; while (c < '0' || c > '9') { if (c == '-') { p = -1; } c = getchar(); } while (c >= '0' && c <= '9') { v = (v << 3) + (v << 1) + c - '0'; c = getchar(); } v *= p;}map
mp;int main(){ int n; read(n); int ans = 0; mp[0] = 1; for (int i = 1; i <= n; i++) { int now; read(now); if (!mp[now]) { mp[now] = 1; ans++; } } cout << ans << endl; return 0;}
View Code

B

题意:

给你L,R,A,B四个数 要你找出一对在L,R范围内的数使得他们的GCD为A,LCM为B 问你有几对

解:

假设我们找到的数是X,Y 那么X*Y肯定为LCM*GCD 因为LCM=X*Y/GCD

所以我们只要在1~sqrt(LCM*GCD)范围内枚举数即可 但是LCM*GCD的最大值是1e18 平方根下来是1e9还是不行

我们观察到X,Y的GCD是X 那么就说明X,Y都是GCD的倍数 所以我们不用++枚举 直接+X枚举即可

这样的复杂度是sqrt(LCM*GCD)/GCD=sqrt(LCM/GCD)  LCM/GCD最大是1e9 可以接受

/*Huyyt*/#include
#define mem(a,b) memset(a,b,sizeof(a))using namespace std;typedef long long ll;typedef unsigned long long ull;const int dir[8][2] = {
{
0, 1}, {
1, 0}, {
0, -1}, { -1, 0}, {
1, 1}, {
1, -1}, { -1, -1}, { -1, 1}};const int mod = 1e9 + 7, gakki = 5 + 2 + 1 + 19880611 + 1e9;const int MAXN = 2e5 + 5, MAXM = 2e5 + 5, N = 2e5 + 5;const int MAXQ = 100010;/*int to[MAXM << 1], nxt[MAXM << 1], Head[MAXN], tot = 1;inline void addedge(int u, int v){ to[++tot] = v; nxt[tot] = Head[u]; Head[u] = tot;}*/inline void read(int &v){ v = 0; char c = 0; int p = 1; while (c < '0' || c > '9') { if (c == '-') { p = -1; } c = getchar(); } while (c >= '0' && c <= '9') { v = (v << 3) + (v << 1) + c - '0'; c = getchar(); } v *= p;}ll gcd(ll a, ll b){ ll t; while (b) { t = b; b = a % b; a = t; } return a;}int main(){ ll l, r, x, y; cin >> l >> r >> x >> y; ll rl = l; ll sum = x * y; ll ans = 0; ll a, b; if (l % x != 0) { l = (l / x + 1) * x; } for (ll i = l; i <= sqrt(sum) && i <= r; i += x) { if (sum % i == 0) { a = i, b = sum / i; if (b >= rl && b <= r) { if (gcd(a, b) == x) { if (a == b) { ans++; } else { ans += 2; } //cout << a << " " << b << endl; } } } } cout << ans << endl; return 0;}
View Code

C

题意:

你开始有X个裙子 你有K+1次增长机会 前K次会100%的增长一倍 但是增长后有50%的机会会减少一个

给你X,K(1e18) 问你最后裙子数量的期望值是多少(mod 1e9+7)

解:

纯推公式找规律题

我们很容易知道其实在K月之后(总共有K+1月)最后可能得到的裙子数是连续的

即如果刚开始有X个裙子且K=2时 他经过K月(没经过最后特殊的那一月)后可能得到的为 4*X,4*X-1,4*X-2,4*X-3 这四种答案

所以可以得到公式经过K月后的期望值为 (2k*X+2k*X-2k+1)*2k/2/2k=(2k+1*X-2k+1)/2

这是K月后的期望值 还有最后一月要*2 所以直接*2 最后的答案即为2k+1*X-2k+1

/*Huyyt*/#include
#define mem(a,b) memset(a,b,sizeof(a))using namespace std;typedef long long ll;typedef unsigned long long ull;const int dir[8][2] = {
{
0, 1}, {
1, 0}, {
0, -1}, { -1, 0}, {
1, 1}, {
1, -1}, { -1, -1}, { -1, 1}};const int mod = 1e9 + 7, gakki = 5 + 2 + 1 + 19880611 + 1e9;const int MAXN = 2e5 + 5, MAXM = 2e5 + 5, N = 2e5 + 5;const int MAXQ = 100010;/*int to[MAXM << 1], nxt[MAXM << 1], Head[MAXN], tot = 1;inline void addedge(int u, int v){ to[++tot] = v; nxt[tot] = Head[u]; Head[u] = tot;}*/inline void read(int &v){ v = 0; char c = 0; int p = 1; while (c < '0' || c > '9') { if (c == '-') { p = -1; } c = getchar(); } while (c >= '0' && c <= '9') { v = (v << 3) + (v << 1) + c - '0'; c = getchar(); } v *= p;}ll Qpow(ll a, ll b){ ll ans = 1, base = a; while (b != 0) { if (b & 1 != 0) { ans *= base; ans %= mod; } base *= base; base %= mod; b >>= 1LL; } return ans;}int main(){ ll x, k; cin >> x >> k; if (x == 0) { cout << 0 << endl; return 0; } ll ans1 = Qpow(2, k + 1); x %= mod; ans1 = (ans1 * x) % mod; ll ans2 = (Qpow(2, k) - 1 + mod) % mod; cout << (ans1 - ans2 + mod) % mod << endl; return 0;}
View Code

D

转载于:https://www.cnblogs.com/Aragaki/p/9215501.html

你可能感兴趣的文章
[转载]电脑小绝技
查看>>
windos系统定时执行批处理文件(bat文件)
查看>>
thinkphp如何实现伪静态
查看>>
BZOJ 2243: [SDOI2011]染色( 树链剖分 )
查看>>
BZOJ 1925: [Sdoi2010]地精部落( dp )
查看>>
c++中的string常用函数用法总结!
查看>>
界面交互之支付宝生活圈pk微信朋友圈
查看>>
[DLX精确覆盖+打表] hdu 2518 Dominoes
查看>>
SuperMap iServerJava 6R扩展领域开发及压力测试---判断点在那个面内(1)
查看>>
Week03-面向对象入门
查看>>
一个控制台程序,模拟机器人对话
查看>>
web.xml 中加载顺序
查看>>
pycharm激活地址
查看>>
hdu 1207 四柱汉诺塔
查看>>
Vue 2.x + Webpack 3.x + Nodejs 多页面项目框架(上篇——纯前端多页面)
查看>>
display:none与visible:hidden的区别
查看>>
我的PHP学习之路
查看>>
【题解】luogu p2340 奶牛会展
查看>>
对PostgreSQL的 SPI_prepare 的理解。
查看>>
解决响应式布局下兼容性的问题
查看>>