C - Splitting Pile

枚举从哪里开始分的即可

#include <bits/stdc++.h>
#define fi first
#define se second
#define pii pair<int,int>
#define mp make_pair
#define pb push_back
#define space putchar(' ')
#define enter putchar('\n')
#define MAXN 200005
#define eps 1e-12
//#define ivorysi
using namespace std;
typedef long long int64;
typedef unsigned int u32;
typedef double db;
template<class T>
void read(T &res) {res = 0;T f = 1;char c = getchar();while(c < '0' || c > '9') {if(c == '-') f = -1;c = getchar();}while(c >= '0' && c <= '9') {res = res * 10 + c - '0';c = getchar();}res *= f;
}
template<class T>
void out(T x) {if(x < 0) {x = -x;putchar('-');}if(x >= 10) {out(x / 10);}putchar('0' + x % 10);
}
int N;
int64 s[MAXN];
void Solve() {read(N);for(int i = 1 ; i <= N ; ++i) read(s[i]);for(int i = 1 ; i <= N ; ++i) s[i] += s[i - 1];int64 ans = abs(s[N] - 2 * s[1]);for(int i = 1 ; i < N ; ++i) {ans = min(ans,abs(s[N] - 2 * s[i]));}out(ans);enter;
}
int main() {
#ifdef ivorysifreopen("f1.in","r",stdin);
#endifSolve();
}

D - Fennec VS. Snuke

看树上这段链从Fennec开始数第K / 2和K / 2+1的边断开之后,分成的两个子树哪个结点多
Fennec只有当节点数大于Snuke才会胜利

#include <bits/stdc++.h>
#define fi first
#define se second
#define pii pair<int,int>
#define mp make_pair
#define pb push_back
#define space putchar(' ')
#define enter putchar('\n')
#define MAXN 100005
#define eps 1e-12
//#define ivorysi
using namespace std;
typedef long long int64;
typedef unsigned int u32;
typedef double db;
template<class T>
void read(T &res) {res = 0;T f = 1;char c = getchar();while(c < '0' || c > '9') {if(c == '-') f = -1;c = getchar();}while(c >= '0' && c <= '9') {res = res * 10 + c - '0';c = getchar();}res *= f;
}
template<class T>
void out(T x) {if(x < 0) {x = -x;putchar('-');}if(x >= 10) {out(x / 10);}putchar('0' + x % 10);
}
struct node {int to,next;
}E[MAXN * 2];
int head[MAXN],sumE,N;
int dep[MAXN],fa[MAXN],siz[MAXN];
void add(int u,int v) {E[++sumE].to = v;E[sumE].next = head[u];head[u] = sumE;
}
void dfs(int u) {dep[u] = dep[fa[u]] + 1;siz[u] = 1;for(int i = head[u] ; i ; i = E[i].next) {int v = E[i].to;if(v != fa[u]) {fa[v] = u;dfs(v);siz[u] += siz[v];}}
}
void Solve() {read(N);int u,v;for(int i = 1 ; i < N ; ++i) {read(u);read(v);add(u,v);add(v,u);}dfs(1);int t = dep[N] / 2 - 1;u = N;while(t--) {u = fa[u];}if(N - siz[u] > siz[u]) puts("Fennec");else puts("Snuke");
}
int main() {
#ifdef ivorysifreopen("f1.in","r",stdin);
#endifSolve();
}

E - Awkward Response

如果不为1后面接的只有0的形式,那么问出第一个\(10^k\)为N则证明数字有k位,然后可以通过二分,判断中间值是否小于当前值可以把mid扩大10倍,这样可以知道中间值的字典序是否大于还是小于n,因为长度相等字典序顺序就是大小顺序,所以可行
如果是1后面接的只有0,那么问出第一个合法的k个9,这个数就是\(10^{k - 1}\)

#include <bits/stdc++.h>
#define fi first
#define se second
#define pii pair<int,int>
#define mp make_pair
#define pb push_back
#define space putchar(' ')
#define enter putchar('\n')
#define MAXN 100005
#define eps 1e-12
//#define ivorysi
using namespace std;
typedef long long int64;
typedef unsigned int u32;
typedef double db;
template<class T>
void read(T &res) {res = 0;T f = 1;char c = getchar();while(c < '0' || c > '9') {if(c == '-') f = -1;c = getchar();}while(c >= '0' && c <= '9') {res = res * 10 + c - '0';c = getchar();}res *= f;
}
template<class T>
void out(T x) {if(x < 0) {x = -x;putchar('-');}if(x >= 10) {out(x / 10);}putchar('0' + x % 10);
}
bool Query(int64 t) {putchar('?');space;out(t);enter;fflush(stdout);char s[5];scanf("%s",s);return s[0] == 'Y';
}
void Solve() {int64 v = 1;bool f = 0;for(int i = 1 ; i <= 10 ; ++i) {if(!Query(v)) {f = 1;v /= 10;break;}v *= 10;}if(!f) {v = 1;for(int i = 1 ; i <= 10 ; ++i) {if(Query(v * 10 - 1)) {putchar('!');space;out(v);enter;return;}v *= 10;}}int64 L = v,R = min(v * 10 - 1,(int64)1e9);while(L < R) {int64 mid = (L + R + 1) >> 1;if(!Query(mid * 10)) L = mid;else R = mid - 1;}putchar('!');space;out(L + 1);enter;
}
int main() {
#ifdef ivorysifreopen("f1.in","r",stdin);
#endifSolve();
}

F - Mole and Abandoned Mine

为啥算完2s跑出来不到0.1s???
atc扩充我的想象力系列???
这个就是把这唯一一条路径挑出来,肯定是希望这条路径和路径上每个点上挂的一个联通块价值最大,然后用总路径价值减掉
然后dp[i][S]表示当前走到第i个点,已经扩充的点集是S,就是每次路径往下走一个点,或者扩充一个包括i其余的点不在S中的点集即可,复杂度\(O(N\times 3^{N})\)
然后我过于智障写错了好几遍,cao

#include <bits/stdc++.h>
#define fi first
#define se second
#define pii pair<int,int>
#define mp make_pair
#define pb push_back
#define space putchar(' ')
#define enter putchar('\n')
#define MAXN 10005
#define eps 1e-12
//#define ivorysi
using namespace std;
typedef long long int64;
typedef unsigned int u32;
typedef double db;
template<class T>
void read(T &res) {res = 0;T f = 1;char c = getchar();while(c < '0' || c > '9') {if(c == '-') f = -1;c = getchar();}while(c >= '0' && c <= '9') {res = res * 10 + c - '0';c = getchar();}res *= f;
}
template<class T>
void out(T x) {if(x < 0) {x = -x;putchar('-');}if(x >= 10) {out(x / 10);}putchar('0' + x % 10);
}
int N,M;
struct node {int to,next,val;
}E[1005];
int sumE,head[25],pos[(1 << 15) + 5];
int f[16][(1 << 15) + 5],h[16][(1 << 15) + 5],sum[(1 << 15) + 5];
void add(int u,int v,int c) {E[++sumE].to = v;E[sumE].next = head[u];E[sumE].val = c;head[u] = sumE;
}
inline int lowbit(int x) {return x & (-x);
}
void Init() {read(N);read(M);int u,v,c;for(int i = 1 ; i <= M ; ++i) {read(u);read(v);read(c);add(u,v,c);add(v,u,c);h[u][1 << v - 1] = c;h[v][1 << u - 1] = c;}for(int i = 1 ; i <= N ; ++i) {for(int j = 1 ; j < (1 << N) ; ++j) {if(lowbit(j) == j) continue;h[i][j] = h[i][j - lowbit(j)] + h[i][lowbit(j)];}}for(int i = 1 ; i <= N ; ++i) pos[(1 << i - 1)] = i;for(int i = 1 ; i < (1 << N) ; ++i) {sum[i] = sum[i - lowbit(i)] + h[pos[lowbit(i)]][i - lowbit(i)];}
}
void Solve() {for(int i = 1 ; i <= N ; ++i) {for(int j = 0 ; j < (1 << N) ; ++j) {f[i][j] = -1e9;}}f[1][1] = 0;for(int j = 0 ; j < (1 << N - 1) ; ++j) {for(int i = 1 ; i <= N ; ++i) {int S = j << 1 | 1;if(!(S & (1 << i - 1))) continue;int L = S ^ (1 << i - 1);for(int T = L; T ; T = (T - 1) & L) {if(f[i][S ^ T] >= 0)f[i][S] = max(f[i][S],f[i][S ^ T] + sum[T ^ (1 << i - 1)]);}if(f[i][S] >= 0) {for(int k = head[i] ; k ; k = E[k].next) {int v = E[k].to;if(!(S & (1 << v - 1))) {f[v][S ^ (1 << v - 1)] = max(f[v][S ^ (1 << v - 1)],f[i][S] + E[k].val);}}}}}out(sum[(1 << N) - 1] - f[N][(1 << N) - 1]);enter;
}
int main() {
#ifdef ivorysifreopen("f1.in","r",stdin);
#endifInit();Solve();
}

转载于:https://www.cnblogs.com/ivorysi/p/10507718.html

【AtCoder】ARC078相关推荐

  1. 【AtCoder】ARC 081 E - Don't Be a Subsequence

    [题意]给定长度为n(<=2*10^5)的字符串,求最短的字典序最小的非子序列字符串. http://arc081.contest.atcoder.jp/tasks/arc081_c [算法]字 ...

  2. 【Atcoder】ARC083 D - Restoring Road Network

    [算法]图论,最短路? [题意]原图为无向连通图,现给定原图的最短路矩阵,求原图最小边权和,n<=300. [题解]要求最小边权和下,原图的所有边一定是所连两端点的最短路. 那么现在将所有最短路 ...

  3. 【AtCoder】ARC095 E - Symmetric Grid 模拟

    [题目]E - Symmetric Grid [题意]给定n*m的小写字母矩阵,求是否能通过若干行互换和列互换使得矩阵中心对称.n,m<=12. [算法]模拟 [题解]首先行列操作独立,如果已确 ...

  4. 【atcoder】Enclosed Points [abc136F]

    题目传送门:https://atcoder.jp/contests/abc136/tasks/abc136_f 题目大意:在平面上有$n$个点我们,定义一个点集的权值为平面上包含这个点集的最小矩形所包 ...

  5. 【atcoder】GP 2 [agc036C]

    题目传送门:https://atcoder.jp/contests/agc036/tasks/agc036_c 题目大意:给你一个长度为$N$初始全0的序列,每次操作你可以找两个不同的元素,一个自增1 ...

  6. 【AtCoder】AGC034

    AGC034 刷了那么久AtCoder我发现自己还是只会ABCE(手动再见 A - Kenken Race 大意是一个横列,每个点可以跳一步或者跳两步,每个格子是空地或者石头,要求每一步不能走到石头或 ...

  7. 【Atcoder】AtCoder Beginner Contest 174总结

    目录 A Air Conditioner B Distance C Repsept D Alter Altar E Logs F Range Set Query A B C D E F √ √ ● ○ ...

  8. 【AtCoder】ARC088

    C - Multiple Gift 题解 首项是X,每次乘个2,暴力统计 代码 #include <bits/stdc++.h> #define fi first #define se s ...

  9. 【AtCoder】diverta 2019 Programming Contest 2

    diverta 2019 Programming Contest 2 A - Ball Distribution 特判一下一个人的,否则是\(N - (K - 1) - 1\) #include &l ...

最新文章

  1. BZOJ 3483 SGU505 Prefixes and suffixes(字典树+可持久化线段树)
  2. Windows轻松实现linux shell环境:gitforwindows
  3. 如何在剃须刀中使用三元运算符(特别是在HTML属性上)?
  4. 怎么用vc采集ni卡数据_SystemLink自学笔记(6):SystemLink架构和数据服务
  5. Sqlite基础及其与SQLServer语法差异
  6. 跳转语句_C/C++中的goto语句
  7. MFC中的Document-View结构
  8. tim怎么设置检测到新版本自动安装 tim安全自动更新的开启方法
  9. 利用数组实现栈java,用java编写出来:用数组实现一个栈
  10. 【python笔记】python基础(注释,缩进,变量,表达式,运算符)
  11. 使用gatling做压力测试与负载测试
  12. Python-爬虫抓取视频
  13. SpringBoot+Editormd实现markdown文本编辑和图片上传
  14. 英语发音规则---K字母
  15. byte java 详解_详解java中的byte类型
  16. Python实现微博热搜推送
  17. 变量的生存期与存储类型
  18. 华为设备:清除配置详解
  19. 基于工作行为的研发管理体系设计及实践
  20. 网页上facebook分享功能的具体实现

热门文章

  1. [机器学习] LR与SVM的异同
  2. uboot,eboot和bootloader的联系
  3. 【python 5】正则表达式
  4. ai与虚拟现实_将AI推向现实世界
  5. 利用PyCaret的力量
  6. C语言高级编程:函数指针的用法
  7. Linux shell:shell 命令的返回值和输出
  8. 银行停贷、涨息、排队,8月不贷只能等明年
  9. Linux-Android启动之zImage生成过程详解
  10. 计算机软件中级职称 入职,计算机职调称论文.doc