以为可以AK,结果t3没有调出来,然后被林巨踩了。

everyday被踩,很开心。

林巨真的好巨啊,这么多天已经总计虐我75分了。

1.玩具装箱

第一眼还以为是那道斜率优化dp,结果是个签到水题。

 //Achen
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<vector>
#include<cstdio>
#include<queue>
#include<cmath>
#include<set>
#include<map>
#define Formylove return 0
#define For(i,a,b) for(int i=(a);i<=(b);i++)
#define Rep(i,a,b) for(int i=(a);i>=(b);i--)
const int N=;
typedef long long LL;
typedef double db;
using namespace std;
int n,m;
LL k,f[N],a[N]; template<typename T>void read(T &x) {
char ch=getchar(); x=; T f=;
while(ch!='-'&&(ch<''||ch>'')) ch=getchar();
if(ch=='-') f=-,ch=getchar();
for(;ch>=''&&ch<='';ch=getchar()) x=x*+ch-''; x*=f;
} #define ANS
int main() {
#ifdef ANS
freopen("toy.in","r",stdin);
freopen("toy.out","w",stdout);
#endif
read(n); read(m); read(k);
For(i,,n) read(a[i]);
memset(f,/,sizeof(f));
f[]=;
For(i,,n) {
LL mi=a[i],mx=a[i];
Rep(j,i-,max(,i-m)) {
f[i]=min(f[i],f[j]+k+(mx-mi)*(i-j));
mi=min(mi,a[j]);
mx=max(mx,a[j]);
}
}
printf("%lld\n",f[n]);
Formylove;
}

2.铁路运费

林巨写的比较优美,我比较傻就用set水过去了。

边权从1到2等于删边。

bfs树上树边和指向深度比它小的点的边有用,分别用set存一下。每次删树边的时候在另一个set里找还有没有可以用的父亲,有就连成新的树边,退出,没有就把它标记了然后删除它到它儿子的边,递归操作它儿子。

 //Achen
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<vector>
#include<cstdio>
#include<queue>
#include<cmath>
#include<set>
#include<map>
#define Formylove return 0
#define For(i,a,b) for(int i=(a);i<=(b);i++)
#define Rep(i,a,b) for(int i=(a);i>=(b);i--)
const int N=2e5+;
typedef long long LL;
typedef double db;
using namespace std;
int n,m,q,ans,no[N]; template<typename T>void read(T &x) {
char ch=getchar(); x=; T f=;
while(ch!='-'&&(ch<''||ch>'')) ch=getchar();
if(ch=='-') f=-,ch=getchar();
for(;ch>=''&&ch<='';ch=getchar()) x=x*+ch-''; x*=f;
} struct edge {
int u,v;
}e[N]; int ecnt,fir[N],nxt[N<<],to[N<<];
void init() { ecnt=; memset(fir,,sizeof(fir)); }
void add(int u,int v) {
nxt[++ecnt]=fir[u]; fir[u]=ecnt; to[ecnt]=v;
nxt[++ecnt]=fir[v]; fir[v]=ecnt; to[ecnt]=u;
} int d[N],fid[N];
queue<int>que;
set<int>s[N],son[N]; void bfs(int s) {
For(i,,n) d[i]=n;
d[s]=;
que.push(s);
while(!que.empty()) {
int x=que.front();
que.pop();
for(int i=fir[x];i;i=nxt[i]) if(d[to[i]]==n) {
d[to[i]]=d[x]+; son[x].insert(to[i]);
que.push(to[i]);
}
}
} void solve(int x,int fa) {
son[fa].erase(x);
s[x].erase(fa);
while(s[x].size()) {
int y=*s[x].begin();
if(!no[y]) { son[y].insert(x); return; }
s[x].erase(y);
}
ans++;
no[x]=;
while(son[x].size()) {
int y=*son[x].begin();
solve(y,x);
}
} #define ANS
int main() {
#ifdef ANS
freopen("train.in","r",stdin);
freopen("train.out","w",stdout);
#endif
read(n); read(m); read(q);
For(i,,m) {
read(e[i].u); read(e[i].v);
add(e[i].u,e[i].v);
}
bfs();
For(x,,n) {
for(int i=fir[x];i;i=nxt[i]) if(d[to[i]]+==d[x])
s[x].insert(to[i]);
}
For(ti,,q) {
int id;
read(id);
int u=e[id].u,v=e[id].v;
if(son[u].find(v)!=son[u].end()||son[v].find(u)!=son[v].end()) {
if(d[u]+==d[v]) solve(v,u);
else solve(u,v);
}
else {
if(s[v].find(u)!=s[v].end()) s[v].erase(u);
else if(s[u].find(v)!=s[u].end()) s[u].erase(v);
}
printf("%d\n",ans);
}
Formylove;
}
/*
5 6 5
1 2
1 3
4 2
3 2
2 5
5 3
5
2
4
1
3
*/

3.城墙

对于每个点维护它往右往下能到的最长没有x的长度记作a[i][j],往左往上能到达的没有x的最长长度b[i][j]。沿着对角线扫,用树状数组维护一下,把a放进树状数组,用b和L限制查询范围。

 //Achen
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<vector>
#include<cstdio>
#include<queue>
#include<cmath>
#include<set>
#include<map>
#define Formylove return 0
#define For(i,a,b) for(int i=(a);i<=(b);i++)
#define Rep(i,a,b) for(int i=(a);i>=(b);i--)
const int N=;
typedef long long LL;
typedef double db;
using namespace std;
int n,m,L,tot;
int mp[N][N],s[N][N],x[N][N],z[N][N],y[N][N],a[N][N],b[N][N]; template<typename T>void read(T &x) {
char ch=getchar(); x=; T f=;
while(ch!='-'&&(ch<''||ch>'')) ch=getchar();
if(ch=='-') f=-,ch=getchar();
for(;ch>=''&&ch<='';ch=getchar()) x=x*+ch-''; x*=f;
} void pre() {
For(i,,n) {
For(j,,m) z[i][j]=mp[i][j]?:z[i][j-]+;
Rep(j,m,) y[i][j]=mp[i][j]?:y[i][j+]+;
}
For(j,,m) {
For(i,,n) s[i][j]=mp[i][j]?:s[i-][j]+;
Rep(i,n,) x[i][j]=mp[i][j]?:x[i+][j]+;
}
For(i,,n) For(j,,m) {
a[i][j]=min(y[i][j],x[i][j]);
b[i][j]=min(z[i][j],s[i][j]);
}
} int sum[N],up;
void add(int x,int v) {
if(!x) return;
for(int i=x;i<=up;i+=(i&(-i)))
sum[i]+=v;
} int qry(int x) {
int rs=;
for(int i=x;i;i-=(i&(-i)))
rs+=sum[i];
return rs;
} vector<int>vc[N],vc2[N];
void solve() {
LL ans=;
For(ty,,m) {
int x=,y=ty;
memset(sum,,sizeof(sum));
For(i,,up) vc[i].clear(),vc2[i].clear();
For(i,,up) {
if(x+i>n||y+i>m) break;
if(i-L+>=&&i-L+>i-b[x+i][y+i]) {
vc2[i-L+].push_back(i);
if(i-b[x+i][y+i]>=)
vc[i-b[x+i][y+i]].push_back(i);
}
}
For(i,,up) {
if(x+i>n||y+i>m) break;
add(a[x+i][y+i]+i,);
int upp=vc[i].size();
For(j,,upp-)
ans-=qry(up)-qry(vc[i][j]);
upp=vc2[i].size();
For(j,,upp-)
ans+=qry(up)-qry(vc2[i][j]);
}
}
For(tx,,n) {
int x=tx,y=;
memset(sum,,sizeof(sum));
For(i,,up) vc[i].clear(),vc2[i].clear();
For(i,,up) {
if(x+i>n||y+i>m) break;
if(i-L+>=&&i-L+>i-b[x+i][y+i]) {
vc2[i-L+].push_back(i);
if(i-b[x+i][y+i]>=)
vc[i-b[x+i][y+i]].push_back(i);
}
}
For(i,,up) {
if(x+i>n||y+i>m) break;
add(a[x+i][y+i]+i,);
int upp=vc[i].size();
For(j,,upp-)
ans-=qry(up)-qry(vc[i][j]);
upp=vc2[i].size();
For(j,,upp-)
ans+=qry(up)-qry(vc2[i][j]);
}
}
printf("%lld\n",ans);
} #define ANS
int main() {
#ifdef ANS
freopen("rampart.in","r",stdin);
freopen("rampart.out","w",stdout);
#endif
read(n); read(m); read(L); read(tot);
up=max(n,m);
For(i,,tot) {
int x,y;
read(x); read(y);
mp[x][y]=;
}
pre();
solve();
Formylove;
}

暑假集训test-8-31(pm)的更多相关文章

  1. STL 入门 (17 暑假集训第一周)

    快速全排列的函数 头文件<algorithm> next_permutation(a,a+n) ---------------------------------------------- ...

  2. 2015UESTC 暑假集训总结

    day1: 考微观经济学去了…… day2: 一开始就看了看一道题目最短的B题,拍了半小时交了上去wa了 感觉自己一定是自己想错了,于是去拍大家都过的A题,十分钟拍完交上去就A了 然后B题写了一发暴力 ...

  3. 暑假集训Day2 互不侵犯(状压dp)

    这又是个状压dp (大型自闭现场) 题目大意: 在N*N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共8个格子. ...

  4. 暑假集训Day1 整数划分

    题目大意: 如何把一个正整数N(N长度<20)划分为M(M>=1)个部分,使这M个部分的乘积最大.N.M从键盘输入,输出最大值及一种划分方式. 输入格式: 第一行一个正整数T(T<= ...

  5. 2013ACM暑假集训总结-致将走上大三征途的我

    回想起这个暑假,从开始与雄鹰一起的纠结要不要进集训队,与吉吉博博组队参加地大邀请赛,害怕进不了集训队.当时激励我月份开始接触的,记得当时在弄运动会来着,然后就问了雄鹰一些输入输出的东西,怀着满心的期待 ...

  6. [补档]暑假集训D6总结

    考试 不是爆零,胜似爆零= = 三道题,就拿了20分,根本没法玩好吧= = 本来以为打了道正解,打了道暴力,加上个特判分,应该不会死的太惨,然而--为啥我只有特判分啊- - 真的是惨. 讲完题觉得题是 ...

  7. [补档]暑假集训D5总结

    %dalao 今天又有dalao来讲课,讲的是网络流 网络流--从入门到放弃:7-29dalao讲课笔记--https://hzoi-mafia.github.io/2017/07/29/27/   ...

  8. [补档]暑假集训D1总结

    归来 今天就这样回来了,虽然心里极其不想回来(暑假!@#的只有一天啊喂),但还是回来了,没办法,虽然不喜欢这个地方,但是机房却也是少数能给我安慰的地方,心再累,也没有办法了,不如好好集训= = %da ...

  9. 暑假集训(2)第七弹 -----今年暑假不AC(hdu2037)

    J - 今年暑假不AC Crawling in process... Crawling failed Time Limit:1000MS     Memory Limit:32768KB     64 ...

随机推荐

  1. IT类影视

    1.爱奇艺 代码(The Code) 2.爱奇艺 操作系统革命(Revolution OS) 3.爱奇艺 互联网之子 4.爱奇艺 深网

  2. yarn安装node-sass报错问题

    react前端项目在用yarn install命令安装依赖时报错了,看了下报错信息是node-sass安装的时候编译报错. 解决方法: 第一步:配置淘宝镜像 yarn config set regis ...

  3. 批量更新数据(BatchUpdate)

    批量更新数据(BatchUpdate) /// <summary> /// 批量更新数据,注意:如果有timestamp列,要移除 /// </summary> /// < ...

  4. 远程仓库 GitHub

    远程仓库 这里介绍的远程仓库指的是 GitHub, 在这个网站,所有非私有的的代码,都可以被其他人查看,所以,一些机密或者重要的文件千万不要上传到这里面,如果需要可以购买付费版本或自己公司搭建埃及的远 ...

  5. Linux下安装PHP的curl扩展

    先安装依赖包: yum install curl curl-devel 找到PHP的安装包,cd 进入安装包 cd php-5.6.25/ext/curl phpize 如果报找不到phpize就补全 ...

  6. CF 1097D - Hello 2019 D题: Makoto and a Blackboard

    目录 Catalog Solution: (有任何问题欢迎留言或私聊 && 欢迎交流讨论哦 Catalog Problem:传送门  Portal  原题目描述在最下面.  给一个数n ...

  7. jmeter 参数化3种

    一.利用函数助手获取参数值 选项->函数助手对话框 __CSVRead, __Random, 生成的函数字符串:${__Random(,,)}第一个参数为随机数的下限,第二个参数为随机数的上限, ...

  8. 技巧&注意事项合集

    技巧&注意事项合集 杂项 OI Wiki有很多实用的东西 编程环境 打开Dev-C++中工具-编译选项-代码生成/优化-代码警告-显示最多警告信息的开关,可以检查出一堆傻逼错误 define ...

  9. 配置Keepalived单实例实现单IP自动漂移接管

    实验要求 ==> 实现Keepalived高可用对之间的故障切换过程,配置的vrrp实例的VIP为192.168.10.66,可以将其配置在网卡别名上. 实验环境 ==> CentOS 7 ...

  10. ios网络学习------2 用非代理方法实现同步post请求

    #pragma mark - 这是私有方法,尽量不要再方法中直接使用属性,由于一般来说属性都是和界面关联的,我们能够通过參数的方式来使用属性 #pragma mark post登录方法 -(void) ...