这里这里

A.签到题

#include <cstdio>

double a[] = {0.4, 0.16, 0.063, 0.025, 0.010, 0.004};

int main() {
int n;
double m;
scanf("%d", &n);;
for(int i = ;i <= n;i ++) {
scanf("%lf", &m);
printf("Case #%d: ", i);
if(m >= ) puts("Too Bright");
else if(m < 0.004) puts("Invisible");
else for(int j = ;j < ;j ++) {
if(m >= a[j]) {
printf("%d\n", j + );
break;
}
}
}
return ;
}

B.很明显的一个做法是我们把 n 个exchange 按 Ri 从小到大排序

对于每个exchage查询获得Ri的最少时间 tim = min( time[Ri] , time[max_money] )

再用 tim + Ti 尝试更新获得Vi需要的最少时间即可

最后ans = min( time[m], time[max_money] )

实现方法则是 sort + 线段树

另外一种奇特的实现方法把线段树换成了树状数组

我们可以看到查询是向后查询,修改是向前修改

而常见的树状数组多为向前查询 i -= lowbit(i),向后修改 i += lowbit(i)...

所以那个我没有看懂...或者可以倒过来?

但是我们找到了另一种思路,类似于堆优化dijkstra的思路

我们对 n 个 exchange 同上述方法排序

小根堆中元素为 pair (s, time) ,time为关键字

time表示获得 s 的最小时间

显然会有每次堆顶元素中, s 严格单增

然后我们用 last_s < Ri <= now_s 的所有 exchange 尝试进行更新即可

#include <bits/stdc++.h>

using namespace std;

typedef long long ll;

struct node {
int v, r, t;
bool operator < (const node &a) const {
return r < a.r;
}
}a[]; struct Node {
int s;
ll tim;
bool operator < (const Node &a) const {
return tim > a.tim;
}
}; int t, n, m; priority_queue <Node> q; int main() {
ios::sync_with_stdio(false);
ll ans;
Node tmp;
cin >> t;
int i, st;
for(int p = ;p <= t;p ++) {
ans = -;
cin >> n >> m;
while(!q.empty()) q.pop();
for(i = ;i <= n;i ++) cin >> a[i].v >> a[i].r >> a[i].t;
sort(a + , a + n + );
q.push((Node){, }), st = ;
while(!q.empty()) {
tmp = q.top();
q.pop();
if(tmp.s >= m) {
ans = tmp.tim;
break;
}
for(i = st;i <= n;i ++) {
if(a[i].r > tmp.s) break;
if(a[i].v <= tmp.s) continue;
q.push((Node){a[i].v, tmp.tim + a[i].t});
}
st = i;
}
printf("Case #%d: %lld\n", p, ans);
}
return ;
}

C.签到题...看清题,大根堆和小根堆都合法,居然还有左大右小的 bst 也可以...

#include <iostream>

using namespace std;

int n, t, a[];

char s[][] = {"Neither", "Heap", "BST", "Both"};

int is_greater_heap() {
for(int i = ;i * <= n;i ++)
if((i * + <= n && a[i * + ] < a[i]) || a[i * ] < a[i]) return ;
return ;
} int is_less_heap() {
for(int i = ;i * <= n;i ++)
if((i * + <= n && a[i * + ] > a[i]) || a[i * ] > a[i]) return ;
return ;
} int is_greater_bst() {
for(int i = ;i * <= n;i ++)
if((i * + <= n && a[i * + ] < a[i]) || a[i * ] > a[i]) return ;
return ;
} int is_less_bst() {
for(int i = ;i * <= n;i ++)
if((i * + <= n && a[i * + ] > a[i]) || a[i * ] < a[i]) return ;
return ;
} int main() {
ios::sync_with_stdio(false);
cin >> t;
for(int i = ;i <= t;i ++) {
cin >> n;
for(int j = ;j <= n;j ++) cin >> a[j];
printf("Case #%d: %s\n", i, s[is_greater_heap() | is_less_heap() | is_greater_bst() | is_less_bst()]);
}
return ;
}

D.

E.

F.你就数对各个字母

然后看到前一个的最后 'g' 可以被下一个再用一次就行了

#include <iostream>

using namespace std;

int main() {
ios::sync_with_stdio(false);
int t, g, o, d, m, n, r, i, k;
string s;
cin >> t, getline(cin, s);
for(int p = ;p <= t;p ++) {
getline(cin, s);
g = o = d = m = n = r = i = k = ;
for(int j = ;j < s.size();j ++) {
g += (s[j] == 'g');
o += (s[j] == 'o');
d += (s[j] == 'd');
m += (s[j] == 'm');
n += (s[j] == 'n');
r += (s[j] == 'r');
i += (s[j] == 'i');
k += (s[j] == ' ');
}
printf("Case #%d: %d\n", p, min(min(min(g - , o / ), min(d, m)), min(min(n / , r), min(i, k))));
}
return ;
}

G.

H.

I.

J.

K.一个比较直观的东西是

min(A & (~B), A & B)至少能去掉 A 中一半的1对吧...所以很快就能变成0了

看到了比较适合本菜鸡的最良心的题解在这里

#include <cstdio>

typedef unsigned long long uint;

int t, n;

uint a[];

uint min(uint x, uint y){
return x < y ? x : y;
} uint dfs(uint k, int i) {
if(i > n) return k;
return min(dfs(k & a[i], i + ), dfs(k & (~a[i]), i + ));
} int main() {
scanf("%d", &t);
for(int p = ;p <= t;p ++) {
scanf("%d", &n);
for(int i = ;i <= n;i ++)
scanf("%llu", &a[i]);
if(n > ) {
printf("Case #%d: 0\n", p);
continue;
}
printf("Case #%d: %llu\n", p, min(dfs(a[], ), dfs(~a[], )));
}
return ;
}

BUPT2017 springtraining(15) #3的更多相关文章

  1. BUPT2017 wintertraining(15) #3 题解

    我觉得好多套路我都不会ヘ(;´Д`ヘ) 题解拖到情人节后一天才完成,还有三场没补完,真想打死自己.( ˙-˙ ) A - 温泉旅店 UESTC - 878  题意 ​ 有n张牌,两人都可以从中拿出任意 ...

  2. BUPT2017 wintertraining(15) #2 题解

    这场有点难,QAQ.补了好久(。• ︿•̀。) ,总算能写题解了(つд⊂) A. Beautiful numbers CodeForces - 55D 题意 ​ 求\([l,r](1\le l_i\l ...

  3. BUPT2017 wintertraining(15) #1 题解

    拖了一周才完成的题解,抛出一个可爱的表情 (っ'-')╮ =͟͟͞͞❤️.对我来说E.F比较难,都是线段树的题,有点久没写了. A - Infinite Sequence CodeForces - 6 ...

  4. BUPT2017 springtraining(16) #1 题解

    https://vjudge.net/contest/162590 A: 不难发现,当L=R时输出L,当L<R时输出2. B: 贪心得配对.1和n配 2和n-1配,对与对直接只要花1个代价就可以 ...

  5. BUPT2017 wintertraining(15) #9

    下面不再说明题意了请自行读题,直接放contest链接. https://vjudge.net/contest/151607 A.考虑当火车隔k站一停时 区间长度 >= k 的纪念品一定能买到 ...

  6. BUPT2017 springtraining(16) #6 ——图论

    题目链接 A.容易发现最后字符的对应都是一对一的 或者说我们没办法出现最后多对一或者一对多的情况 所以只要算出 ‘a’ - 'z' 每个字符最后对应的字符即可 #include <cstdio& ...

  7. BUPT2017 springtraining(16) #4 ——基础数论

    题目在这里 A.手动打表找规律得组合数 n -= 2, m -= 2, ans = C(n, m) #include <bits/stdc++.h> using namespace std ...

  8. BUPT2017 springtraining(16) #3 ——搜索与动态规划

    题目在这里啊 A.最长上升子序列,范围很小所以写了简单的O(n^2)算法 #include <iostream> #define rep(i, j, k) for(int i = j;i ...

  9. BUPT2017 springtraining(16) #2 ——基础数据结构

    题目在这里 A.似乎是个并查集+??? B.10W的范围,似乎可以暴力来一发二分+sort? 但我猜正解可以O(nlogn)? C.单调队列入门题目 #include <cstdio> ] ...

随机推荐

  1. loj 102 最小费用流

    补一发费用流的代码 %%%棒神 #include<iostream> #include<cstdio> #include<cstring> #include< ...

  2. bzoj4082

    贪心+倍增 首先如果这个问题在序列上,好像可以按右端点排序,然后从起点开始向能到的最远的地方走. 但是环上不可以,因为随即一个起点可能不是最小的. 然后神思路来了:我们先将环展开倍增,再将区间按右端点 ...

  3. 基于Android SDK安装PhoneGap框架

    下载zip文件PhoneGap 2.0.0 PhoneGap 2.0.0 Released 20 Jul 2012http://phonegap.com/download/ 解压缩后的目录结构:Dir ...

  4. 题解报告:hihoCoder #1175:拓扑排序·二

    题目链接:https://hihocoder.com/problemset/problem/1175 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho所在学 ...

  5. 如何下载Nginx(Windows) 并且简单使用

    官网地址:http://nginx.org/ 进入官网后点击: 推荐下载的是稳定版: 现在开始简单的使用: 一.打开下载文件的目录解压后打开文件 二.在其他盘新建一个test.html,静态资源,用来 ...

  6. Redis 的简单运算

    Redis 的简单运算 命令 说明 备注 incr key 在原字段上加 1 只能对整数操作 incrby key increment 在原字段上加上整数 (increment) 只能对整数操作 de ...

  7. JS高级——Function

    Function构造函数 可以用来新建函数对象 1.一个参数都不传的情况创建的就是一个空的函数 2.只传一个参数的情况这个参数就是函数体 3.传多个参数的情况,最后一个参数为函数体,前面的参数都是该函 ...

  8. 移动web——基本知识点总结

    视口viewport 1.在桌面端的浏览器的宽度有肯能是很大的,如果设置了一个很大的值,那么在移动端中的浏览器显示的时候会有横向移动的拖拽条,为了避免出现这样的横向拖拽条,我们每次都要页面的宽度就是移 ...

  9. Java 中访问数据库的步骤?Statement 和PreparedStatement 之间的区别?

    Java 中访问数据库的步骤?Statement 和PreparedStatement 之间的区别? Java 中访问数据库的步骤 1)注册驱动: 2)建立连接: 3)创建Statement: 4)执 ...

  10. nginx-配置反向代理实例

    nginx反向代理配置及优化 2009-05-26 作者:守住每一天blog:liuyu.blog.51cto.combbs:bbs.linuxtone.orgmsn:liuyubj520#hotma ...