牛客国庆集训派对Day7 Solution
A Relic Discovery
水。
- #include <bits/stdc++.h>
- using namespace std;
- int t, n;
- int main()
- {
- scanf("%d", &t);
- while (t--)
- {
- scanf("%d", &n);
- int res = ;
- for (int i = , a, b; i <= n; ++i)
- {
- scanf("%d%d", &a, &b);
- res += a * b;
- }
- printf("%d\n", res);
- }
- return ;
- }
B Pocket Cube
按题意模拟即可,注意顺时针转逆时针转均可,也就是说一个面有八种旋转可能
- #include <bits/stdc++.h>
- using namespace std;
- int t;
- int G[][], tmp[][];
- bool ok()
- {
- for (int i = ; i <= ; ++i)
- for (int j = ; j <= ; ++j)
- if (tmp[i][j] != tmp[i][j - ])
- return false;
- return true;
- }
- void clear()
- {
- for (int i = ; i <= ; ++i)
- for (int j = ; j <= ; ++j)
- tmp[i][j] = G[i][j];
- }
- int origin[][][] =
- {
- // top
- {, , , , , , , , , , , , , , , ,},
- // bottom
- {, , , , , , , , , , , , , , , ,},
- // left
- {, , , , , , , , , , , , , , , ,},
- // right
- {, , , , , , , , , , , , , , , ,},
- // front
- {, , , , , , , , , , , , , , , ,},
- // back
- {, , , , , , , , , , , , , , , ,},
- };
- int Move[][][] =
- {
- {, , , , , , , , , , , , , , , ,},
- {, , , , , , , , , , , , , , , ,},
- {, , , , , , , , , , , , , , , ,},
- {, , , , , , , , , , , , , , , ,},
- {, , , , , , , , , , , , , , , ,},
- {, , , , , , , , , , , , , , , ,},
- };
- bool work()
- {
- clear(); if (ok()) return true;
- for (int i = ; i < ; ++i)
- {
- for (int j = ; j < ; j += )
- {
- clear();
- for (int k = ; k < ; ++k)
- {
- int x = (j + k) % ;
- tmp[origin[i][x][]][origin[i][x][]] = G[Move[i][x][]][Move[i][x][]];
- }
- if (ok()) return true;
- }
- for (int j = ; j < ; j += )
- {
- clear();
- for (int k = ; k > -; --k)
- {
- int x = (j + k + ) % ;
- int y = (x + ) % ;
- tmp[origin[i][x][]][origin[i][x][]] = G[Move[i][y][]][Move[i][y][]];
- }
- if (ok()) return true;
- }
- }
- return false;
- }
- int main()
- {
- scanf("%d", &t);
- while(t--)
- {
- for (int i = ; i <= ; ++i)
- for (int j = ; j <= ; ++j)
- scanf("%d", &G[i][j]);
- puts(work() ? "YES" : "NO");
- }
- return ;
- }
C Pocky
根据样例发现规律 答案为 log(l / d) + 1.0 如果 l <= d 答案为0
- #include <bits/stdc++.h>
- using namespace std;
- const double eps = 1e-;
- int t;
- double l, d;
- int main()
- {
- scanf("%d", &t);
- while (t--)
- {
- scanf("%lf%lf", &l, &d);
- if (l <= d || fabs(l - d) <= eps)
- printf("%.6f\n", 0.0);
- else
- printf("%.6f\n", log(l / d) + 1.0);
- }
- return ;
- }
D Lucky Coins
留坑。
E Fibonacci
留坑。
F Lambda Calculus
留坑。
G Coding Contest
题意:有n个区域,每个区域有$s_i$个人以及$b_i$个食物,有m条路,每条路最多让$c_i$个人走,其中第一个人走不产生影响,后面的每个人都有p的可能破坏 求最小的破坏可能
思路:将p取log就变成了累加最小,建立一个源点以及一个汇点,其中每块区域需要出走的人和汇点相连,可以进来的人与源点相连,跑一遍最小费用最大流即可
- #include<bits/stdc++.h>
- using namespace std;
- const double eps = 1e-;
- const double EI = exp(1.0);
- const int maxn = ;
- const int maxm = ;
- const int INF = 0x3f3f3f3f;
- int sgn(double x)
- {
- if(fabs(x) < eps) return ;
- else return x > ? : -;
- }
- struct Edge{
- int to, nxt, cap, flow;
- double cost;
- }edge[maxm];
- double ans;
- int head[maxn], tot;
- int pre[maxn];
- double dis[maxn];
- bool vis[maxn];
- int N;
- void Init(int n)
- {
- N = n;
- tot = ;
- for(int i = ; i <= n; ++i) head[i] = -;
- }
- void addedge(int u, int v,int cap, double cost)
- {
- edge[tot].to = v;
- edge[tot].cap = cap;
- edge[tot].cost = cost;
- edge[tot].flow = ;
- edge[tot].nxt = head[u];
- head[u] = tot++;
- edge[tot].to = u;
- edge[tot].cap = ;
- edge[tot].cost = -cost;
- edge[tot].flow = ;
- edge[tot].nxt = head[v];
- head[v] = tot++;
- }
- bool SPFA(int s,int t)
- {
- queue<int>q;
- for(int i = ; i < N; ++i)
- {
- dis[i] = INF;
- vis[i] = false;
- pre[i] = -;
- }
- dis[s] = ;
- vis[s] = true;
- q.push(s);
- while(!q.empty())
- {
- int u = q.front();
- q.pop();
- vis[u] = false;
- for(int i = head[u]; ~i; i = edge[i].nxt)
- {
- int v = edge[i].to;
- if(edge[i].cap > edge[i].flow && sgn(dis[v] - dis[u] - edge[i].cost) > )
- {
- dis[v] = dis[u] + edge[i].cost;
- pre[v] = i;
- if(!vis[v])
- {
- vis[v] = true;
- q.push(v);
- }
- }
- }
- }
- if(pre[t] == -) return false;
- else return true;
- }
- int minCostMaxflow(int s, int t)
- {
- int flow = ;
- ans = ;
- while(SPFA(s, t))
- {
- int Min = INF;
- for(int i = pre[t]; ~i; i = pre[edge[i ^ ].to])
- {
- Min = min(Min, edge[i].cap - edge[i].flow);
- }
- for(int i = pre[t]; ~i; i = pre[edge[i ^ ].to])
- {
- edge[i].flow += Min;
- edge[i ^ ].flow -= Min;
- ans += edge[i].cost * Min;
- }
- flow += Min;
- }
- return flow;
- }
- int n, m;
- int s[maxn], b[maxn], tmp[maxn];
- int main()
- {
- int t;
- scanf("%d", &t);
- while(t--)
- {
- scanf("%d %d", &n, &m);
- Init(n + );
- for(int i = ; i <= n; ++i)
- {
- scanf("%d %d", s + i, b + i);
- if(s[i] - b[i] > ) addedge(, i, s[i] - b[i], );
- if(s[i] - b[i] < ) addedge(i, n + , b[i] - s[i], );
- }
- for(int i = ; i <= m; ++i)
- {
- int u, v, c;
- double p;
- scanf("%d %d %d %lf", &u, &v, &c ,&p);
- p = -log(1.0 - p);
- if(c > ) addedge(u, v, , );
- if(c > ) addedge(u, v, c - , p);
- }
- int flow = minCostMaxflow(, n + );
- ans = pow(EI, -ans);
- printf("%.2f\n", 1.0 - ans);
- }
- return ;
- }
H Pattern
留坑。
I Travel Brochure
留坑。
J Cliques
留坑。
K Finding Hotels
题意:有若干酒店,以及一些旅客,每个旅客有价格接受范围,对于每个旅客要找出可接受价格以内的所有酒店中最近的
思路:KDTree 对于价格直接特判,如果超出,直接return INF 还要注意多解的情况下取id小的
- #include <bits/stdc++.h>
- using namespace std;
- #define ll long long
- #define N 200010
- #define DIM 10
- #define INF 0x3f3f3f3f3f3f3f3f
- inline ll sqr(ll x) { return x * x; }
- namespace KD
- {
- int K;
- struct Point
- {
- ll x[DIM];
- int id;
- ll distance(const Point &b) const
- {
- if (x[] < b.x[]) return INF;
- ll ret = ;
- for (int i = ; i < K; ++i) ret += sqr(x[i] - b.x[i]);
- return ret;
- }
- void input(int id) { this->id = id; for (int i = ; i < K + ; ++i) scanf("%lld", x + i); }
- void output() { for (int i = ; i < K + ; ++i) printf("%lld%c", x[i], " \n"[i == K]); }
- };
- struct cmpx
- {
- int div;
- cmpx(const int &div) { this->div = div; }
- bool operator () (const Point &a, const Point &b)
- {
- for (int i = ; i < K; ++i) if (a.x[(div + i) % K] != b.x[(div + i) % K])
- return a.x[(div + i) % K] < b.x[(div + i) % K];
- return true;
- }
- };
- bool cmp(const Point &a, const Point &b, int div) { return cmpx(div)(a, b); }
- struct node
- {
- Point e;
- node *lc, *rc;
- int div;
- }pool[N], *tail, *root;
- void init() { tail = pool; }
- node* build(Point *a, int l, int r, int div)
- {
- if (l >= r) return NULL;
- node *p = tail++;
- p->div = div;
- int mid = (l + r) >> ;
- nth_element(a + l, a + mid, a + r, cmpx(div));
- p->e = a[mid];
- p->lc = build(a, l, mid, (div + ) % K);
- p->rc = build(a, mid + , r, (div + ) % K);
- return p;
- }
- Point res; ll Min;
- void search(Point p, node *x, int div)
- {
- if (!x) return;
- if (cmp(p, x->e, div))
- {
- search(p, x->lc, (div + ) % K);
- ll tmp = p.distance(x->e);
- if (tmp < Min || tmp == Min && x->e.id < res.id)
- {
- Min = tmp;
- res = x->e;
- }
- if (sqr(x->e.x[div] - p.x[div]) <= Min)
- search(p, x->rc, (div + ) % K);
- }
- else
- {
- search(p, x->rc, (div + ) % K);
- ll tmp = p.distance(x->e);
- if (tmp < Min || tmp == Min && x->e.id < res.id)
- {
- Min = tmp;
- res = x->e;
- }
- if (sqr(x->e.x[div] - p.x[div]) <= Min)
- search(p, x->lc, (div + ) % K);
- }
- }
- void search(Point p)
- {
- Min = INF;
- search(p, root, );
- }
- }
- int t, n, q;
- KD::Point p[N];
- void Run()
- {
- for (scanf("%d", &t); t--; )
- {
- KD::K = ;
- scanf("%d%d", &n, &q);
- for (int i = ; i < n; ++i) p[i].input(i);
- KD::init();
- KD::root = KD::build(p, , n, );
- for (int i = ; i <= q; ++i)
- {
- KD::Point o; o.input();
- KD::search(o);
- KD::res.output();
- }
- }
- }
- int main()
- {
- #ifdef LOCAL
- freopen("Test.in", "r", stdin);
- #endif
- Run();
- return ;
- }
L Tower Attack
留坑。
M Generator and Monitor
留坑。
牛客国庆集训派对Day7 Solution的更多相关文章
- 牛客国庆集训派对Day2 Solution
A 矩阵乘法 思路: 1° 牛客机器太快了,暴力能过. #include <bits/stdc++.h> using namespace std; #define N 5000 in ...
- 计算几何板子题【2019牛客国庆集训派对day7——三角形和矩形】【多边形相交的面积】
链接:https://ac.nowcoder.com/acm/contest/1112/J来源:牛客网 题目描述 Bobo 有一个三角形和一个矩形,他想求他们交的面积. 具体地,三角形和矩形由 8 个 ...
- 2019牛客国庆集训派对day7 A 2016
链接:https://ac.nowcoder.com/acm/problem/52800来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65536K ...
- 牛客国庆集训派对Day4 Solution
A 深度学习 puts(n) #include <bits/stdc++.h> using namespace std; int main() { double n; while ( ...
- 牛客国庆集训派对Day1 Solution
A Tobaku Mokushiroku Kaiji 水. #include <bits/stdc++.h> using namespace std; ], b[]; void Ru ...
- 牛客国庆集训派对Day3 Solution
A Knight 留坑. B Tree 思路:两次树形DP,但是要考虑0没有逆元 可以用前缀后缀做 #include <bits/stdc++.h> using namespa ...
- 牛客国庆集训派对Day5 Solution
A 璀璨光滑 留坑. B 电音之王 蒙特马利大数乘模运算 #include <bits/stdc++.h> using namespace std; typedef long ...
- 牛客国庆集训派对Day6 Solution
A Birthday 思路:设置一个源点,一个汇点,每次对$源点对a_i, b_i , a_i 对 b_i 连一条流为1,费用为0的边$ 每个点都再连一条 1, 3, 5, 7, ....的边到 ...
- 牛客国庆集训派对Day6 A Birthday 费用流
牛客国庆集训派对Day6 A Birthday:https://www.nowcoder.com/acm/contest/206/A 题意: 恬恬的生日临近了.宇扬给她准备了一个蛋糕. 正如往常一样, ...
随机推荐
- ios开发 int,NSInteger,NSUInteger,NSNumber
分享一下,在工作工程中遇到的一些不留心的地方: 1.当需要使用int类型的变量的时候,可以像写C的程序一样,用int,也可以用NSInteger,但更推荐使用NSInteger,因为这样就不用考虑设备 ...
- iOS调用系统相册、相机 显示中文标题
解决手机语言已经设置显示中文 在调用系统相册.相机界面 时显示英文问题, 在 info.plist里面添加Localized resources can be mixed YES 表 ...
- 怎么下载tomcat的其他版本
下载地址: http://archive.apache.org/dist/tomcat/ 里面包含tomcat的各个版本,windows版本.linux版本,tomcat7.0.x等.
- 如何在Oculus官网下载OculusSetup.exe(当前时间20170720)
踩着免费的蓝灯FQ登录了Oculus官网,找了半天找不到哪里下载OculusSetup.exe,最后在最下面的支持中心找到了..... https://www.oculus.com/
- Java自动类型转换
■ 自动类型转换:容量小的数据类型可以自动转换为容量大的数据类型. ■ 特例:可以讲整型常量直接赋给byte,short,char等类型变量,而不需要强制类型转换,只要不超出其表数范围. ■ 强制类型 ...
- JS基本动画
<style type="text/css"> .color_red { background: red; } div { position: absolute; to ...
- web基础---->Fileupload文件的上传
这里我们介绍文件上传的知识,使用的是apache的Commons FileUpload框架. 文件上传的使用 项目的部分结构如下: 一.使用Commons FileUpload的上传功能,我们需要引入 ...
- 【CSS系列】布局篇
一.让设计居中 1.使用自动空白边让设计居中 <style type="text/css"> body{ text-align:center; min-width:76 ...
- mysql数据类型及存储过程
转自:http://www.cnblogs.com/mark-chan/p/5384139.html 存储过程简介 SQL语句需要先编译然后执行,而存储过程(Stored Procedure)是一组为 ...
- 编程中,static的用法详解
C++的static有两种用法:面向过程程序设计中的static和面向对象程序设计中的static.前者应用于普通变量和函数,不涉及类:后者主要说明static在类中的作用.一.面向过程设计中的sta ...