本来以为是1199rated的。。仔细一看发现是1999,所以就做了一下

这场涨分很轻松啊。。。为啥又没打

等pkuwc考完我一定打一场atcoder(咕咕咕,咕咕咕,咕咕咕咕咕咕咕~)

但是其实我思维速度上真的有点不行。。。

A - Bulletin Board

输出\((N - W + 1)(N - H + 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 20000005
#define eps 1e-10
//#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,H,W;
void Solve() {
read(N);read(H);read(W);
out(1LL * (N - H + 1) * (N - W + 1));enter;
}
int main() {
#ifdef ivorysi
freopen("f1.in","r",stdin);
#endif
Solve();
}

B - Contests

统计这三个区间的个数,输出最小值

#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 20000005
#define eps 1e-10
//#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;
int P[105],A,B;
int cnt[3];
void Solve() {
read(N);read(A);read(B);
for(int i = 1 ; i <= N ; ++i) {
read(P[i]);
if(P[i] <= A) ++cnt[0];
else if(P[i] <= B) ++cnt[1];
else cnt[2]++;
}
out(min(min(cnt[0],cnt[1]),cnt[2]));enter;
}
int main() {
#ifdef ivorysi
freopen("f1.in","r",stdin);
#endif
Solve();
}

C - Alternating Path

相邻的黑白格子之间有边,答案是每个联通块里的黑白点个数乘积之和

#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 20000005
#define eps 1e-10
//#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 H,W,a[405][405],cnt[2];
char s[405][405];
bool vis[405][405];
int dx[] = {0,1,0,-1};
int dy[] = {1,0,-1,0};
bool in_range(int x,int y) {
return x >= 1 && x <= H && y >= 1 && y <= W;
}
void dfs(int x,int y) {
cnt[a[x][y]]++;vis[x][y] = 1;
for(int k = 0 ; k < 4 ; ++k) {
int tx = x + dx[k],ty = y + dy[k];
if(in_range(tx,ty)) {
if(!vis[tx][ty] && a[tx][ty] != a[x][y]) {
dfs(tx,ty);
}
}
}
}
void Solve() {
read(H);read(W);
for(int i = 1 ; i <= H ; i++) {
scanf("%s",s[i] + 1);
for(int j = 1 ; j <= W ; ++j) {
if(s[i][j] == '#') a[i][j] = 1;
else a[i][j] = 0;
}
}
int64 ans = 0;
for(int i = 1 ; i <= H ; ++i) {
for(int j = 1 ; j <= W ; ++j) {
if(!vis[i][j]) {
cnt[1] = 0;cnt[0] = 0;
dfs(i,j);
ans += 1LL * cnt[1] * cnt[0];
}
}
}
out(ans);enter;
}
int main() {
#ifdef ivorysi
freopen("f1.in","r",stdin);
#endif
Solve();
}

D - Nearest Card Game

先二分一个k,使得\([x - k,x + k]\)区间里的数的个数小于等于\((x + k,\infty)\)里的数,且\(k\)最大,先把\([x - k,x + k]\)这些区间里这么多数两个人分别取走

然后从这个状态暴力模拟(大于x的数不会超过两个了),使得所有的数都小于x,剩下的就是交替一个一个取了,可以用一个前缀和预处理出来

#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-10
//#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,Q;
int64 A[MAXN],sum[MAXN],b[MAXN];
pii Calc(int64 l,int64 r) {
int a = lower_bound(A + 1,A + N + 1,l) - A;
int b = upper_bound(A + 1,A + N + 1,r) - A - 1;
return mp(a,b);
}
int64 Process(int64 x) {
if(x >= A[N]) return sum[N];
int64 L = 0,R = A[N];
int p = lower_bound(A + 1,A + N + 1,x) - A;
while(L < R) {
int64 mid = (L + R + 1) >> 1;
pii t = Calc(x - mid,x + mid);
int rem = N - p + 1 - (t.se - p + 1);
if(rem >= t.se - t.fi + 1) L = mid;
else R = mid - 1;
}
pii t = Calc(x - L,x + L);
int len = t.se - t.fi + 1;
int64 res = b[N] - b[N - len];
int q = N - len,h0 = t.fi - 1,h1 = t.se + 1;
while(q >= h1) {
res += A[q];--q;
if(h1 > q && h0 < 1) break;
int now;
if(h1 > q) now = h0;
else if(h0 < 1) now = h1;
else {
if(x - A[h0] <= A[h1] - x) now = h0;
else now = h1;
}
if(now == h1) ++h1;
if(now == h0) --h0;
}
res += sum[h0];
return res;
}
void Solve() {
read(N);read(Q);
for(int i = 1 ; i <= N ; ++i) read(A[i]);
for(int i = 1 ; i <= N ; ++i) {
sum[i] = A[i];
if(i >= 2) sum[i] += sum[i - 2];
b[i] = A[i] + b[i - 1];
}
int64 x;
for(int i = 1 ; i <= Q ; ++i) {
read(x);
out(Process(x));enter;
}
}
int main() {
#ifdef ivorysi
freopen("f1.in","r",stdin);
#endif
Solve();
}

E - Attack to a Tree

这个直接dp就好了,\(dp[u][j][0/1]\)表示以\(u\)为根,砍断了\(j\)条边,0表示没有电脑,1表示有电脑,dp里的值就是和u联通的联通块值最小值是多少

用一个bool数组辅助记录一下这个dp状态可不可以被达到

转移的话就是树背包,\(dp[u][j][a] + dp[v][h][b] \rightarrow dp[u][j + h][a | b]\)

然后如果有父亲的话用\(dp[u][j][0]\)和\(dp[u][j][1]\)更新\(dp[u][j + 1][0]\)

没有的话就直接记录答案就行

#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 5005
#define eps 1e-10
//#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;
bool vis[MAXN][MAXN][2],used[MAXN][2];
int64 dp[MAXN][MAXN][2],A[MAXN],g[MAXN][2];
int N,siz[MAXN],ans;
void add(int u,int v) {
E[++sumE].to = v;
E[sumE].next = head[u];
head[u] = sumE;
}
void dfs(int u,int fa) {
if(A[u] < 0) {
vis[u][0][1] = 1;dp[u][0][1] = A[u];
}
if(A[u] > 0) {
vis[u][0][0] = 1;dp[u][0][0] = A[u];
}
for(int i = head[u] ; i ; i = E[i].next) {
int v = E[i].to;
if(v != fa) {
dfs(v,u);
}
}
memset(used,0,sizeof(used));
siz[u] = 1;
for(int i = head[u] ; i ; i = E[i].next) {
int v = E[i].to;
if(v != fa) {
for(int j = 0 ; j <= siz[u] + siz[v] ; ++j) used[j][0] = used[j][1] = 0;
for(int j = 0 ; j <= siz[u] ; ++j) {
for(int a = 0 ; a <= 1 ; ++a) {
if(!vis[u][j][a]) continue;
for(int h = 0 ; h <= siz[v] ; ++h) {
for(int b = 0 ; b <= 1 ; ++b) {
if(!vis[v][h][b]) continue;
if(!used[j + h][a | b]) {
g[j + h][a | b] = dp[u][j][a] + dp[v][h][b];
used[j + h][a | b] = 1;
}
else g[j + h][a | b] = min(g[j + h][a | b],dp[u][j][a] + dp[v][h][b]);
}
}
}
}
for(int j = 0 ; j <= siz[u] + siz[v] ; ++j) {
for(int a = 0 ; a <= 1 ; ++a) {
vis[u][j][a] = used[j][a];
dp[u][j][a] = g[j][a];
}
}
siz[u] += siz[v];
}
}
if(fa) {
for(int j = siz[u] ; j >= 0 ; --j) {
if(vis[u][j][1] && dp[u][j][1] < 0) {dp[u][j + 1][0] = 0;vis[u][j + 1][0] = 1;}
if(vis[u][j][0]) {dp[u][j + 1][0] = 0;vis[u][j + 1][0] = 1;}
}
}
else {
for(int j = 0 ; j <= siz[u] ; ++j) {
if(vis[u][j][1] && dp[u][j][1] < 0) {ans = j;break;}
if(vis[u][j][0]) {ans = j;break;}
}
}
}
void Solve() {
read(N);
for(int i = 1 ; i <= N ; ++i) read(A[i]);
int u,v;
for(int i = 1 ; i < N ; ++i) {
read(u);read(v);
add(u,v);add(v,u);
}
dfs(1,0);
out(ans);enter;
}
int main() {
#ifdef ivorysi
freopen("f1.in","r",stdin);
#endif
Solve();
}

【AtCoder】AISing Programming Contest 2019的更多相关文章

  1. 【AtCoder】Yahoo Programming Contest 2019

    A - Anti-Adjacency K <= (N + 1) / 2 #include <bits/stdc++.h> #define fi first #define se se ...

  2. 【AtCoder】KEYENCE Programming Contest 2019

    A - Beginning 这个年份恐怕需要+2 #include <bits/stdc++.h> #define fi first #define se second #define p ...

  3. 【AtCoder】Tenka1 Programmer Contest 2019

    Tenka1 Programmer Contest 2019 C - Stones 题面大意:有一个01序列,改变一个位置上的值花费1,问变成没有0在1右边的序列花费最少多少 直接枚举前i个都变成0即 ...

  4. 【AtCoder】M-SOLUTIONS Programming Contest

    M-SOLUTIONS Programming Contest A - Sum of Interior Angles #include <bits/stdc++.h> #define fi ...

  5. 【AtCoder】Dwango Programming Contest V题解

    A - Thumbnail 题意简述:给出N个数,找出N个数中和这N个数平均值绝对值最小的数 根据题意写代码即可= = #include <bits/stdc++.h> #define f ...

  6. AtCoder AISing Programming Contest 2019 Task D. Nearest Card Game

    题目分析在代码注释里. int main() { #if defined LOCAL && !defined DUIPAI ifstream in("main.in" ...

  7. 【AtCoder】Mujin Programming Challenge 2017

    Mujin Programming Challenge 2017 A - Robot Racing 如果每个数都是一个一个间隔开的,那么答案是\(n!\) 考虑把一个数挪到1,第二个数挪到3,以此类推 ...

  8. AISing Programming Contest 2019 翻车记

    A:签到. #include<iostream> #include<cstdio> #include<cstdlib> #include<cmath> ...

  9. 【AtCoder】Tenka1 Programmer Contest

    C - 4/N 列出个方程枚举解一下 #include <bits/stdc++.h> #define fi first #define se second #define pii pai ...

随机推荐

  1. (转)MFC界面风格

    以前在XP写的程序,现在系统换成了WIN7,现在对话框在编辑和预览的时候显示都如图一所示,可实际编译生成之后的显示却如图二所示,是什么问题?如何设置两者的显示风格使其保持一致? ----------- ...

  2. 计算正多边形的面积 Gym - 101840G

    http://codeforces.com/gym/101840/attachments 题目大意:输入n,r,k .n代表往外扩张几次,r代表圆的内接圆半径,k代表多边形的边长.问你每次扩张多边形和 ...

  3. SpringBoot常用Starter介绍和整合模板引擎Freemaker、thymeleaf 4节课

    1.SpringBoot Starter讲解 简介:介绍什么是SpringBoot Starter和主要作用 1.官网地址:https://docs.spring.io/spring-boot/doc ...

  4. session和token

    功能是一样的,都是要与浏览器建立连接,获取与客户端对应的用户数据,只不过完成这个功能的实现方式不太一样. 本质上的区别: session的使用方式是客户端cookie里存id,服务端session存用 ...

  5. 【转】Python数据类型之“集合(Sets)与映射(Mapping)”

    [转]Python数据类型之“集合(Sets)与映射(Mapping)” 一.集合类型(Sets) 集合对象是不同的(不可重复)hashable对象的无序集合.常见用法包括:成员关系测试.移除序列中的 ...

  6. python中argparse

    python中argparse 在很多编程语言中,运行程序可以直接使用function(a,b,……)运行程序,但是在python中就无法实现,那么我们如何在命令行中传递参数呢?在python的中,有 ...

  7. ulimit -n 修改

    Linux系统里打开文件描述符的最大值,一般缺省值是1024,对一台繁忙的服务器来说,这个值偏小,所以有必要重新设置linux系统里打开文件描述符的最大值.那么应该在哪里设置呢? [root@loca ...

  8. 单个 LINQ to Entities 查询中的两个结构上不兼容的初始化过程中出现类型“XXXX”

    最近在做一个报表的时候,用EF使用了Contact方法,但是程式运行一直出错.最近终于找到原因了,写下来提醒下自己.好了,进入正题: 现在我举个栗子,目前数据库中有ParentStudent表和Sub ...

  9. 利用jstack命令定位占用cpu高的java线程及具体错误代码信息

    1.先用top查询某进程的线程CPU占用情况,定位到cpu占用高的进程pid 2.根据pid定位具体的线程top -p PID -H ,找出占用cpu最大的pid,此处占用cpu比较平均,我们随便选择 ...

  10. Expm 3_2 寻找最邻近的点对

      [问题描述] 设p1=(x1,y1), p2=(x2,y2), … , pn=(xn,yn) 是平面上n个点构成的集合S,设计和实现找出集合S中距离最近点对的算法. 每一个格子最多只能存在一个点, ...