2017-2018 ACM-ICPC, Asia Tsukuba Regional Contest

Secret of Chocolate Poles

思路:暴力枚举黑巧克力的个数和厚黑巧克力的个数

代码:

#pragma GCC optimize(2)
#pragma GCC optimize(3)
#pragma GCC optimize(4)
#include<bits/stdc++.h>
using namespace std;
#define fi first
#define se second
#define pi acos(-1.0)
#define LL long long
//#define mp make_pair
#define pb push_back
#define ls rt<<1, l, m
#define rs rt<<1|1, m+1, r
#define ULL unsigned LL
#define pll pair<LL, LL>
#define pli pair<LL, int>
#define pii pair<int, int>
#define piii pair<pii, int>
#define mem(a, b) memset(a, b, sizeof(a))
#define fio ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
#define fopen freopen("in.txt", "r", stdin);freopen("out.txt", "w", stout);
//head LL C(int n, int m) {
LL res = ;
if(n-m < m) m = n-m;
for (int i = ; i <= m; i++) {
res *= (n-i+);
res /= i;
}
return res;
}
int main() {
int l, k;
LL res = ;
scanf("%d %d", &l, &k);
LL ans = ;
for (int i = ; i <= ; i++) {
for (int j = ; j <= i; j++) {
if(j*k + (i-j) + i- <= l) {
ans += C(i, j);
}
}
}
printf("%lld\n", ans);
return ;
}

Parallel Lines

思路:预处理+暴力

代码:

#pragma GCC optimize(2)
#pragma GCC optimize(3)
#pragma GCC optimize(4)
#include<bits/stdc++.h>
using namespace std;
#define fi first
#define se second
#define pi acos(-1.0)
#define LL long long
//#define mp make_pair
#define pb push_back
#define ls rt<<1, l, m
#define rs rt<<1|1, m+1, r
#define ULL unsigned LL
#define pll pair<LL, LL>
#define pli pair<LL, int>
#define pii pair<int, int>
#define piii pair<pii, int>
#define mem(a, b) memset(a, b, sizeof(a))
#define fio ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
#define fopen freopen("in.txt", "r", stdin);freopen("out.txt", "w", stout);
//head int a[], b[];
pii p[];
pii delta[];
int tmp[][];
piii T[];
int t[];
int vv[];
int main() {
int m;
scanf("%d", &m); for (int i = ; i <= m; i++) scanf("%d %d", &p[i].fi, &p[i].se);
int cnt = ;
for (int i = ; i <= m; i++) {
for (int j = ; j <= m; j++) {
if(i == j) continue;
int x = p[i].fi - p[j].fi;
int y = p[i].se - p[j].se;
int d = __gcd(x, y);
x /= d;
y /= d;
if(x > && y < ) x = -x, y = -y;
T[++cnt].fi.fi = x;
T[cnt].fi.se = y;
T[cnt].se = cnt;
tmp[i][j] = cnt;
}
}
sort(T+, T++cnt);
int now = ;
t[T[].se] = now;
for (int i = ; i <= cnt; i++) {
if(T[i].fi.fi == T[i-].fi.fi && T[i].fi.se == T[i-].fi.se) {
t[T[i].se] = now;
}
else {
t[T[i].se] = ++now;
}
}
for (int i = ; i <= m; i++) {
for (int j = ; j <= m; j++) {
tmp[i][j] = t[tmp[i][j]];
}
}
int up = (<<m)-;
int ans = ;
for (int i = ; i <= up; i++) {
if(__builtin_popcount(i) == m/ && (up^i) < i) {
int tot = , cnt = ;
for (int j = ; j < m; j++) if((i&(<<j)) == ) a[++tot] = j+; else b[++cnt] = j+;
do {
int res = ;
for (int i = ; i <= tot; i++) {
res += vv[tmp[a[i]][b[i]]];
vv[tmp[a[i]][b[i]]]++;
}
for (int i = ; i <= tot; i++) vv[tmp[a[i]][b[i]]]--;
ans = max(ans, res);
}
while(next_permutation(a+, a++tot));
// cout<<ans<<endl;
}
}
printf("%d\n", ans);
return ;
}

Medical Checkup

思路:模拟

代码:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=1e5+;
ll a[maxn];
ll mol,den;
int main()
{
ll n,t;
scanf("%lld%lld",&n,&t);
for(int i=;i<n;i++) scanf("%lld",&a[i]);
ll pre1=,pre2=;
for(int i=;i<n;i++)
{
// pre1+=a[i];
den=max(a[i],den);
mol=t-pre1-a[i]>= ? t-pre1-a[i]:-den;
pre1+=a[i];
printf("%lld\n",mol/den+);
}
}

Making Perimeter of the Convex Hull Shortest

Black or White

Pizza Delivery

思路:先分别求出每个点到1和2的最短路d1[i], d2[i],

对于一条边u->v, 如果d1[v] + d2[u] + w < 1到2最短路径, 那么肯定是HAPPY

否则看这条边是不是1到2的所有最短路径所构成的无向图中的桥, 如果是桥, 删去后最短路肯定变大, 是SAD, 否则最短路径肯定不变, 是SOSO

代码:

#pragma GCC optimize(2)
#pragma GCC optimize(3)
#pragma GCC optimize(4)
#include<bits/stdc++.h>
using namespace std;
#define fi first
#define se second
#define pi acos(-1.0)
#define LL long long
//#define mp make_pair
#define pb push_back
#define ls rt<<1, l, m
#define rs rt<<1|1, m+1, r
#define ULL unsigned LL
#define pll pair<LL, LL>
#define pli pair<LL, int>
#define pii pair<int, int>
#define piii pair<pii, int>
#define mem(a, b) memset(a, b, sizeof(a))
#define fio ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
#define fopen freopen("in.txt", "r", stdin);freopen("out.txt", "w", stout);
//head const int N = 1e5 + ;
const LL INF = 0x3f3f3f3f3f3f3f3f;
vector<pii> g[N], rg[N], tg[N];
int ans[N], u[N], v[N], w[N], low[N], dfn[N], tot = ;
pii fa[N];
LL d1[N], d2[N];
priority_queue<pli, vector<pli>, greater<pli> > q;
void Dij1(int s) {
mem(d1, INF);
d1[s] = ;
q.push({, s});
while(!q.empty()) {
pli p = q.top();
q.pop();
int u = p.se;
if(p.fi > d1[u]) continue;
for (pii to : g[u]) {
int v = to.fi;
int w = to.se;
if(d1[u] + w < d1[v]) {
d1[v] = d1[u] + w;
q.push({d1[v], v});
}
}
}
}
void Dij2(int s) {
mem(d2, INF);
d2[s] = ;
q.push({, s});
while(!q.empty()) {
pli p = q.top();
q.pop();
int u = p.se;
if(p.fi > d2[u]) continue;
for (pii to : rg[u]) {
int v = to.fi;
int w = to.se;
if(d2[u] + w < d2[v]) {
d2[v] = d2[u] + w;
q.push({d2[v], v});
}
}
}
}
void tarjan(int u, pii o) {
low[u] = dfn[u] = ++tot;
fa[u] = o;
for (pii p: tg[u]) {
int v = p.fi;
if(!dfn[v]) {
tarjan(v, {u, p.se});
low[u] = min(low[u], low[v]);
}
else if(v != o.fi) low[u] = min(low[u], dfn[v]);
}
}
int main() {
int n, m;
scanf("%d %d", &n, &m);
for (int i = ; i <= m; i++) {
scanf("%d %d %d", &u[i], &v[i], &w[i]);
g[u[i]].pb({v[i], w[i]});
rg[v[i]].pb({u[i], w[i]});
}
Dij1();
Dij2();
for (int i = ; i <= m; i++) {
if(d1[v[i]] + w[i] + d2[u[i]] < d1[]) ans[i] = ;
else if(d1[u[i]] + w[i] + d2[v[i]] == d1[]) {
tg[u[i]].pb({v[i], i});
tg[v[i]].pb({u[i], i});
}
} tarjan(, {, });
for (int v = ; v <= n; v++) {
int u = fa[v].fi;
int id = fa[v].se;
if(low[v] > dfn[u]) ans[id] = ; }
for (int i = ; i <= m; i++) {
if(ans[i] == ) puts("HAPPY");
else if(ans[i] == ) puts("SAD");
else puts("SOSO");
}
return ;
}

Rendezvous on a Tetrahedron

思路:将立体问题转换成平面问题

代码:

#pragma GCC optimize(2)
#pragma GCC optimize(3)
#pragma GCC optimize(4)
#include<bits/stdc++.h>
using namespace std;
#define fi first
#define se second
#define pi acos(-1.0)
#define LL long long
//#define mp make_pair
#define pb push_back
#define ls rt<<1, l, m
#define rs rt<<1|1, m+1, r
#define ULL unsigned LL
#define pll pair<LL, LL>
#define pli pair<LL, int>
#define pii pair<int, int>
#define piii pair<pii, int>
#define mem(a, b) memset(a, b, sizeof(a))
#define fio ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
#define fopen freopen("in.txt", "r", stdin);freopen("out.txt", "w", stout);
//head char s[];
int w, l;
double f1(double x, double c) {
return sqrt()*x + c;
}
double f2(double x, double c) {
return -sqrt()*x + c;
}
int solve() {
scanf("%s", s);
scanf("%d %d", &w, &l);
if(s[] == 'B') w += ;
else if(s[] == 'C') w += ;
double y = l * sin(w*pi/180.0);
double x = - l * cos(w*pi/180.0);
while(y > *sqrt()) y -= *sqrt();
while(x > ) x -= ;
while(x < ) x += ;
if( <= x && x < ) {
if( <= y && y <= sqrt()) {
if(y > f1(x, ) && y > f2(x, sqrt())) return ;
else if(y < f1(x, ) && y < f2(x, sqrt())) return ;
else if(y > f1(x, ) && y < f2(x, sqrt())) {
if(y > sqrt()/2.0) return ;
else return ;
}
else {
if(y > sqrt()/2.0) return ;
else return ;
}
}
else {
if(y > f1(x, sqrt()) && y > f2(x, *sqrt())) return ;
else if(y < f1(x, sqrt()) && y < f2(x, *sqrt())) return ;
else if(y > f1(x, sqrt()) && y < f2(x, *sqrt())) {
if(y > sqrt()*3.0/2.0) return ;
else return ;
}
else {
if(y > sqrt()*3.0/2.0) return ;
else return ;
}
}
}
else {
if( <= y && y <= sqrt()) {
if(y > f1(x, -sqrt()) && y > f2(x, *sqrt())) return ;
else if(y < f1(x, -sqrt()) && y < f2(x, *sqrt())) return ;
else if(y > f1(x, -sqrt()) && y < f2(x, *sqrt())) {
if(y > sqrt()/2.0) return ;
else return ;
}
else {
if(y > sqrt()/2.0) return ;
else return ;
}
}
else {
if(y > f1(x, ) && y > f2(x, *sqrt())) return ;
else if(y < f1(x, ) && y < f2(x, *sqrt())) return ;
else if(y > f1(x, ) && y < f2(x, *sqrt())) {
if(y > sqrt()*3.0/2.0) return ;
else return ;
}
else {
if(y > sqrt()*3.0/2.0) return ;
else return ;
}
}
}
}
int main() {
if(solve() == solve()) puts("YES");
else puts("NO");
return ;
}

Homework

Starting a Scenic Railroad Service

思路:

第一种就是求对于每个区间,有多少个区间与他相交, 取最大值, 这个用容斥做

第二种贪心求,每次从优先队列里取出右端点最靠前的,与当前区间左端点比较

#pragma GCC optimize(2)
#pragma GCC optimize(3)
#pragma GCC optimize(4)
#include<bits/stdc++.h>
using namespace std;
#define fi first
#define se second
#define pi acos(-1.0)
#define LL long long
//#define mp make_pair
#define pb push_back
#define ls rt<<1, l, m
#define rs rt<<1|1, m+1, r
#define ULL unsigned LL
#define pll pair<LL, LL>
#define pli pair<LL, int>
#define pii pair<int, int>
#define piii pair<pii, int>
#define mem(a, b) memset(a, b, sizeof(a))
#define fio ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
#define fopen freopen("in.txt", "r", stdin);freopen("out.txt", "w", stout);
//head const int N = 2e5 + , M = 1e5 + ;
pii a[N];
int n, bit[M], btt[M];
priority_queue<int, vector<int>, greater<int> > q;
void add(int x, int ty) {
if(ty == ) {
while(x < M) bit[x]++, x += x&-x;
}
else {
while(x < M) btt[x]++, x += x&-x;
}
}
int sum(int x, int ty) {
int ans = ;
if(ty == ) {
while(x) ans += bit[x], x -= x&-x;
}
else {
while(x) ans += btt[x], x -= x&-x;
}
return ans;
}
int main() {
scanf("%d", &n);
for (int i = ; i <= n; i++) {
scanf("%d %d", &a[i].fi, &a[i].se);
}
sort(a+, a++n);
for (int i = ; i <= n; i++) {
if(q.empty()) q.push(a[i].se);
else {
int p = q.top();
if(a[i].fi >= p) {
q.pop();
q.push(a[i].se);
}
else q.push(a[i].se);
}
}
int ans2 = q.size(), ans1 = ;
for (int i = ; i <= n; i++) {
add(a[i].se, );
add(a[i].fi, );
}
for (int i = ; i <= n; i++) {
int t = n- - sum(a[i].fi, );
t -= (n - sum(a[i].se-, ));
ans1 = max(ans1, t);
// cout << a[i].fi << " " << a[i].se << " " << t << endl;
}
printf("%d %d\n", ans1+, ans2);
return ;
}

String Puzzle

Counting Cycles

2017-2018 ACM-ICPC, Asia Tsukuba Regional Contest的更多相关文章

  1. ACM ICPC Central Europe Regional Contest 2013 Jagiellonian University Kraków

    ACM ICPC Central Europe Regional Contest 2013 Jagiellonian University Kraków Problem A: Rubik’s Rect ...

  2. 2019-2020 ICPC, Asia Jakarta Regional Contest (Online Mirror, ICPC Rules, Teams Preferred)

    2019-2020 ICPC, Asia Jakarta Regional Contest (Online Mirror, ICPC Rules, Teams Preferred) easy: ACE ...

  3. 2018-2019, ICPC, Asia Yokohama Regional Contest 2018 K

    传送门:https://codeforces.com/gym/102082/attachments 题解: 代码: /** * ┏┓ ┏┓ * ┏┛┗━━━━━━━┛┗━━━┓ * ┃ ┃ * ┃ ━ ...

  4. 2018 ICPC Asia Jakarta Regional Contest

    题目传送门 题号 A B C D E F G H I J K L 状态 Ο . . Ο . . Ø Ø Ø Ø . Ο Ο:当场 Ø:已补 .  :  待补 A. Edit Distance Thin ...

  5. Gym - 101981K The 2018 ICPC Asia Nanjing Regional Contest K.Kangaroo Puzzle 暴力或随机

    题面 题意:给你1个20*20的格子图,有的是障碍有的是怪,你可以每次指定上下左右的方向,然后所有怪都会向那个方向走, 如果2个怪撞上了,就融合在一起,让你给不超过5w步,让所有怪都融合 题解:我们可 ...

  6. Gym - 101981M The 2018 ICPC Asia Nanjing Regional Contest M.Mediocre String Problem Manacher+扩增KMP

    题面 题意:给你2个串(长度1e6),在第一个串里找“s1s2s3”,第二个串里找“s4”,拼接后,是一个回文串,求方案数 题解:知道s1和s4回文,s2和s3回文,所以我们枚举s1的右端点,s1的长 ...

  7. Gym - 101981G The 2018 ICPC Asia Nanjing Regional Contest G.Pyramid 找规律

    题面 题意:数一个n阶三角形中,有多少个全等三角形,n<=1e9 题解:拿到题想找规律,手画开始一直数漏....,最后还是打了个表 (打表就是随便定个点为(0,0),然后(2,0),(4,0), ...

  8. Gym - 101981I The 2018 ICPC Asia Nanjing Regional Contest I.Magic Potion 最大流

    题面 题意:n个英雄,m个怪兽,第i个英雄可以打第i个集合里的一个怪兽,一个怪兽可以在多个集合里,有k瓶药水,每个英雄最多喝一次,可以多打一只怪兽,求最多打多少只 n,m,k<=500 题解:显 ...

  9. Gym - 101981D The 2018 ICPC Asia Nanjing Regional Contest D.Country Meow 最小球覆盖

    题面 题意:给你100个三维空间里的点,让你求一个点,使得他到所有点距离最大的值最小,也就是让你找一个最小的球覆盖掉这n个点 题解:红书模板题,这题也因为数据小,精度也不高,所以也可以用随机算法,模拟 ...

随机推荐

  1. API网关性能比较:NGINX vs. ZUUL vs. Spring Cloud Gateway vs. Linkerd(转)

    前几天拜读了 OpsGenie 公司(一家致力于 Dev & Ops 的公司)的资深工程师 Turgay Çelik 博士写的一篇文章(链接在文末),文中介绍了他们最初也是采用 Nginx 作 ...

  2. 一种基于 Numpy 的 TF-IDF 实现报告

    一种基于 Numpy 的 TF-IDF 实现报告 摘要 本文使用了一种 state-of-the-art 的矩阵表示方法来计算每个词在每篇文章上的 TF-IDF 权重(特征).本文还将介绍基于 TF- ...

  3. 通过SIMPLE_DEV_PM_OPS定义suspend和resume函数【转】

    本文转载自:https://blog.csdn.net/tiantao2012/article/details/77851782 通过SIMPLE_DEV_PM_OPS 定义这个驱动的suspend和 ...

  4. linux内核中的fuse是什么?

    答: 一个用户态文件系统框架,属于内核的一种特性. 1.组成部分 fuse.ko(内核模块) + libfuse.*(用户空间库) + fusemount(挂载工具) 2.参考资料 fuse.txt

  5. 待续未完- 自己写后台内容管理程序 - 用tp框架 和 前台 jquery ui等写的

    在日常开发中,我们主要使用的还是 php 的 内部的 语言本身提供的函数/常量,系统内部数组等. 为了和后面的tp框架提供的 "系统函数.系统常量"相区别,把php提供的东西叫语言 ...

  6. SpringBoot 利用过滤器Filter修改请求url地址

    要求: 代码中配置的url路径为http://127.0.0.1/api/associates/queryAssociatesInfo 现在要求http://127.0.0.1/associates/ ...

  7. Spyder 调出绘图界面

    Tools->Preference->IPython console->Graphics->Graphics backend->QT4 or QT5

  8. iis6-0 cve-2017-7269 批量验证脚本

    代码地址 import subprocess f = open('ips.txt', 'r') flines = f.readlines() vulnsrvs = 0 i = 1 for line i ...

  9. 题解——HDU 2089 不要62(数位DP)

    最近在学数位DP 应该是入门题吧 设\( dp[i][0/1] \)表示到第\( i \)位时,前一位是否是6的满足条件的数的个数 然后就是套路 注意\( limit \)的限制条件以及转移时候信息的 ...

  10. hosts文件介绍

    在Window系统中有个Hosts文件(没有后缀名),在Windows98系统下该文件在Windows目录,在Windows2000/XP系统中位于C:\Winnt\System32\Drivers\ ...