Educational Codeforces Round 17
来源:互联网 发布:天龙八部2 源码下载 编辑:程序博客网 时间:2024/06/15 20:45
Unrated所以就随便写了……结果写的有点烂……改写的没写完GG
A.
题目大意:给出一个数n(1<=n<=1e15),求n的第k小的因子(1<=k<=1e9).
分析:刚开始被n的范围吓到了,然后各种思路跑偏,最后也没什么结果,去吃了点东西回来看了看B不少人做就去做B了,做完B回来看A就知道该怎么写了orz……虽然n的范围很大,暴力枚举1~n内的每一个数显然会超时,但实际上我们只需要枚举1~n^(1/2)内的数即可,剩下的数可以由n/i得到,我们每次得到这一对数可以把他们用一个set维护,然后从头开始遍历到第k个就是答案。
代码:
#include <iostream>#include <string.h>#include <stdio.h>#include <stdlib.h>#include <math.h>#include <cstring>#include <vector>#include <list>#include <map>#include <set>#include <queue>#include <stack>#include <bitset>#include <sstream>#include <algorithm>#include <numeric>#include <functional>//#include <iomanip.h>#include <limits.h>//#include <strstrea.h>//#include <fstream.h>#define ll long long#define ull unsigned long long//#define int64 long long#define INF 0x3f3f3f3fusing namespace std;const int maxn = 1e8;ll n;int k;set<ll> s;int main() { cin >> n >> k; s.insert(1); s.insert(n); for (ll i = 2; i * i <= n; i++) { if (n % i == 0) { s.insert(i); s.insert(n / i); } } set<ll>::iterator it = s.begin(); if (s.size() < k) cout << -1 << endl; else { for (int i = 0; i < k - 1; i++) it++; cout << *it << endl; } return 0;}
B.
题目大意:有a台电脑只能用usb接口鼠标,b台电脑只能用PC/2接口鼠标,c台电脑两种接口都可以用,一共m个鼠标,每个鼠标有一个花费val和接口,求最大可以安装鼠标的电脑数和最小耗费。
分析:先两种鼠标排下序,优先考虑单一接口的,然后双接口的用剩下的鼠标填起来就好了。wa了一次是因为如果两种鼠标都有剩余应当优先考虑两种鼠标中价格最小的给双接口的电脑。
代码:
#include <iostream>#include <string.h>#include <stdio.h>#include <stdlib.h>#include <math.h>#include <cstring>#include <vector>#include <list>#include <map>#include <set>#include <queue>#include <stack>#include <bitset>#include <sstream>#include <algorithm>#include <numeric>#include <functional>//#include <iomanip.h>#include <limits.h>//#include <strstrea.h>//#include <fstream.h>#define ll long long#define ull unsigned long long//#define int64 long long#define INF 0x3f3f3f3fusing namespace std;const int maxn = 1e6;int a, b, c, m;ll usb[maxn];ll pc[maxn];int uc = 0, pcc = 0;string s;int main() { cin >> a >> b >> c >> m; ll val; for (int i = 0; i < m; i++) { cin >> val >> s; if (s[0] == 'U') usb[uc++] = val; else pc[pcc++] = val; } sort(usb, usb + uc); sort(pc, pc + pcc); ll ans = 0; int sum = 0; int i = 0, j = 0; while (a > 0 && i < uc) { ans += usb[i]; a--; i++; sum++; } while (b > 0 && j < pcc) { ans += pc[j]; b--; j++; sum++; } while (c > 0 && i < uc && j < pcc) { if (usb[i] < pc[j]) { ans += usb[i++]; sum++; c--; } else { ans += pc[j++]; sum++; c--; } } while (c > 0 && i < uc) { ans += usb[i]; i++; c--; sum++; } while (c > 0 && j < pcc) { ans += pc[j]; j++; c--; sum++; } cout << sum << " " << ans << endl; return 0;}
剩下的补完题再写吧orz……
0 0
- Educational Codeforces Round 17
- Educational Codeforces Round 17
- Educational Codeforces Round 17 题解
- Educational Codeforces Round 17 A+B
- Educational Codeforces Round 17-D. Maximum path
- Educational Codeforces Round 17 C 二分
- Educational Codeforces Round 17 D dp
- Educational Codeforces Round 17-C Two strings
- Educational Codeforces Round 1
- Educational Codeforces Round 2
- Educational Codeforces Round 2
- Educational Codeforces Round 2
- Educational Codeforces Round 3
- Codeforces Educational Round 3
- Codeforces Educational Round 5
- Codeforces Educational round 5
- Educational Codeforces Round 5
- Educational Codeforces Round 6
- HDU2089-不要62
- LOVE2D-04-加载文字和图片
- 从现在开始写博客
- 326. Power of Three \ 258. Add Digits \ 263. Ugly Number \ 231. Power of Two
- JavaScript中高阶函数的使用例子
- Educational Codeforces Round 17
- 1.Phaser游戏引擎介绍
- 2.phaser创建游戏和场景
- 3.phaser点击图片
- 492. Construct the Rectangle (E)
- 关于一些java的零碎的知识点
- java实现循环列队
- python pip 使用方法
- 春节“恐归”,你怕的到底是什么?