暑假集训test-8-31(pm)
以为可以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)的更多相关文章
- STL 入门 (17 暑假集训第一周)
快速全排列的函数 头文件<algorithm> next_permutation(a,a+n) ---------------------------------------------- ...
- 2015UESTC 暑假集训总结
day1: 考微观经济学去了…… day2: 一开始就看了看一道题目最短的B题,拍了半小时交了上去wa了 感觉自己一定是自己想错了,于是去拍大家都过的A题,十分钟拍完交上去就A了 然后B题写了一发暴力 ...
- 暑假集训Day2 互不侵犯(状压dp)
这又是个状压dp (大型自闭现场) 题目大意: 在N*N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共8个格子. ...
- 暑假集训Day1 整数划分
题目大意: 如何把一个正整数N(N长度<20)划分为M(M>=1)个部分,使这M个部分的乘积最大.N.M从键盘输入,输出最大值及一种划分方式. 输入格式: 第一行一个正整数T(T<= ...
- 2013ACM暑假集训总结-致将走上大三征途的我
回想起这个暑假,从开始与雄鹰一起的纠结要不要进集训队,与吉吉博博组队参加地大邀请赛,害怕进不了集训队.当时激励我月份开始接触的,记得当时在弄运动会来着,然后就问了雄鹰一些输入输出的东西,怀着满心的期待 ...
- [补档]暑假集训D6总结
考试 不是爆零,胜似爆零= = 三道题,就拿了20分,根本没法玩好吧= = 本来以为打了道正解,打了道暴力,加上个特判分,应该不会死的太惨,然而--为啥我只有特判分啊- - 真的是惨. 讲完题觉得题是 ...
- [补档]暑假集训D5总结
%dalao 今天又有dalao来讲课,讲的是网络流 网络流--从入门到放弃:7-29dalao讲课笔记--https://hzoi-mafia.github.io/2017/07/29/27/ ...
- [补档]暑假集训D1总结
归来 今天就这样回来了,虽然心里极其不想回来(暑假!@#的只有一天啊喂),但还是回来了,没办法,虽然不喜欢这个地方,但是机房却也是少数能给我安慰的地方,心再累,也没有办法了,不如好好集训= = %da ...
- 暑假集训(2)第七弹 -----今年暑假不AC(hdu2037)
J - 今年暑假不AC Crawling in process... Crawling failed Time Limit:1000MS Memory Limit:32768KB 64 ...
随机推荐
- hdu 3374 最大最小表示法 next
题目大意: 就是求一个串的最大最小表示法的开始下标,然后求有多少个做大最小表示,输出格式为 最小表示下标 它的个数 最大表示下标 它的个数 基本思路: 最小最大表示法模板题,然后求一下循环节,很容易知 ...
- 二进制搭建一个完整的K8S集群部署文档
服务器规划 角色 IP 组件 k8s-master1 192.168.31.63 kube-apiserver kube-controller-manager kube-scheduler etcd ...
- Restrictions----用法
----------------------------------------方法说明 --------------------------QBC常用限定方法-------------------- ...
- HTML标签类总结
1.a标签除了可以作为连接也可以发送邮箱,a标签里的文本颜色不能继承父级的. 2.有几个特殊的块级元素只能包含内嵌元素,不能再包含块级元素,这几个特殊的标签是:h1.h2.h3.h4.h5.h6.p. ...
- $.ajax(),传参要用data
$("#modal").find(".btn-primary").unbind("click").click(function(){ var ...
- 9. Python函数
函数 函数能提高应用的模块性,和代码的重复利用率.定义一个函数比较简单,但是需要遵循以下几点规则: 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号 (). 任何传入参数和自变量必须放在圆 ...
- Codeforces 1183A Nearest Interesting Number
题目链接:http://codeforces.com/problemset/problem/1183/A 题意:求不小于 a 且每位数和能被 4 整除的 最小 n 思路:暴力模拟就好. AC代码: # ...
- tensorflow 训练最后预测结果为一个定值,可能的原因
训练一个分类网络,没想到预测结果为一个定值. 找了很久发现,是因为tensor的维度的原因. 注意:我说的是我的label数据的维度. 我的输入是: y_= tf.placeholder(tf.in ...
- ATM+购物车结构
ATM+购物车 1.需求分析 2.程序设计及目录设计 3.编写程序 4.调试程序
- Django的日常-数据传输
目录 Django的日常-1 Django中最常用的三个东西 HTTPresponse render redirect 静态文件相关 form表单的get与post 神奇的request 模板的传值方 ...