牛客国庆集训派对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 题意: 恬恬的生日临近了.宇扬给她准备了一个蛋糕. 正如往常一样, ...
随机推荐
- python使用sqlalchemy连接pymysql数据库
python使用sqlalchemy连接mysql数据库 字数833 阅读461 评论0 喜欢1 sqlalchemy是python当中比较出名的orm程序. 什么是orm? orm英文全称objec ...
- list中的比较
一说到list的的确不知道写些什么.....我觉得别人总结的比我写的还要好很多. 我擅长记录自己的误区. |--List:元素是有序的(怎么存的就怎么取出来,顺序不会乱),元素可以重复(角标1上有个3 ...
- Sublime Text 快捷键使用
Sublime Text 2包含了大量快捷操作,而且还很方便修改和追加自己喜欢的快捷键.查看快捷键的方式也很简单:------------------------------------------- ...
- JavaScript中eval()函数
eval调用时,实例为eval( "( javascript代码 )" ), eval() 函数可将字符串转换为代码执行,并返回一个或多个值.
- EL表达式格式化日期时间
1.首先引入标签库 <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> ...
- 时序数据库技术体系 – InfluxDB 多维查询之倒排索引
本文转自: http://hbasefly.com/2018/02/09/timeseries-database-5/ 在时序数据库概述一文中,笔者提到时序数据库的基础技术栈主要包括高吞吐写入实现.数 ...
- poj_3987 Trie图
题目大意 有N个病毒,病毒由A-Z字母构成,N个病毒各不相同.给出一段程序P,由A-Z字母构成,若病毒在在程序P或者P的逆转字符串P'中存在,则该程序P被该病毒感染.求出程序P被多少种病毒感染. 题目 ...
- Lucene构建索引时的一些概念和索引构建的过程
在搜索文档内容之前要做的事情就是对从各种不同来源(网页,数据库,电子邮件等)的文档进行索引,索引的过程就是对内容进行提取,规范化(通过对内容进行建模来实现),然后存储. 在索引的过程中有几个基本的概念 ...
- 拦截chrome的console.log输出
console.log = function(){}; 这样 console.log(123) 将不会在输出任何调试信息
- Egret Wing4.0.3 动画编辑器
一 exml上摆放组件 切换动画编辑 创建动画组,命名test1. 选中一个对象,创建动画(必须选中一个对象后,+号才会亮.且一个对象只能创建一个动画) 之后和Flash差不多.在时间轴插入关键帧. ...