暑假集训test-8-26
真 noip模拟题
但是被我做得稀巴烂
新高二除了林巨做得勉强能看,其他人都做得稀巴烂
老张都要绝望了
t1.水呀水
题如其名是道水题。新建个点代表水源,跑最小生成树即可。
//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,ecnt;
char s[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,w;
edge(){}
edge(int u,int v,int w):u(u),v(v),w(w){}
friend bool operator <(const edge&A,const edge&B) {
return A.w<B.w;
}
}e[N<<]; int fa[N];
int find(int x) { return x==fa[x]?x:fa[x]=find(fa[x]); } LL kruskal(int n) {
LL rs=;
int tot=;
For(i,,n) fa[i]=i;
For(i,,ecnt) {
int u=e[i].u,v=e[i].v,w=e[i].w;
int x=find(u),y=find(v);
if(x!=y) {
tot++;
rs+=w;
fa[x]=y;
if(tot==n-) break;
}
}
return tot==n-?rs:-;
} #define ANS
int main() {
#ifdef ANS
freopen("water.in","r",stdin);
freopen("water.out","w",stdout);
#endif
read(n);
scanf("%s",s+);
For(i,,n) if(s[i]=='') e[++ecnt]=edge(n+,i,);
For(i,,n) {
int w; read(w);
if(s[i]==''&&w!=-) e[++ecnt]=edge(n+,i,w);
}
read(m);
For(i,,m) {
int u,v,w;
read(u); read(v); read(w);
e[++ecnt]=edge(u,v,w);
}
sort(e+,e+ecnt+);
LL ans=kruskal(n+);
if(ans==-) puts("Are you kidding me");
else printf("%lld\n",ans);
Formylove;
}
t2浪呀浪
一开始想这道题的时候脑子抽了,在这道题花的时间太长了,实际上除了注意细节就是道水题啊。
最后十几分钟才码出正解,大样例都没过就交了,结果i+k,j+k,i-k,j-k各种数组越界炸成40。
于是定义了个函数来找判断i,j是否越界。
题解:发现一定可以找到一条横着的或者竖着的线使得两个矩形在线一边另一个矩形在线另一边,处理出左上左下右上右下四个二维前缀最大值数组,横竖左右扫四遍即可得答案。
//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,k,a[N][N],b[N][N],c[N][N],ans;
int zs[N][N],zx[N][N],ys[N][N],yx[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;
} int ok(int x,int y,int xx,int yy) {
return max(abs(x-xx),abs(y-yy))>=k;
} int ck(int i,int j) { return i>=&&i<=n&&j>=&&j<=m; } int ZS(int i,int j) { return ck(i,j)?zs[i][j]:; }
int ZX(int i,int j) { return ck(i,j)?zx[i][j]:; }
int YS(int i,int j) { return ck(i,j)?ys[i][j]:; }
int YX(int i,int j) { return ck(i,j)?yx[i][j]:; } #define ANS
int main() {
#ifdef ANS
freopen("wave.in","r",stdin);
freopen("wave.out","w",stdout);
#endif
read(n); read(m); read(k);
For(i,,n) For(j,,m) read(a[i][j]);
For(i,,n) {
int sum=;
For(j,,m) {
sum+=a[i][j];
b[i][j]=b[i-][j]+sum;
}
}
For(i,k,n) For(j,k,m) c[i][j]=b[i][j]-b[i-k][j]-b[i][j-k]+b[i-k][j-k];
For(i,,n) {
int sum=;
For(j,,m) {
sum=max(sum,c[i][j]);
zs[i][j]=max(zs[i-][j],sum);
}
}
For(i,,n) {
int sum=;
Rep(j,m,) {
sum=max(sum,c[i][j]);
ys[i][j]=max(ys[i-][j],sum);
}
}
Rep(i,n,) {
int sum=;
For(j,,m) {
sum=max(sum,c[i][j]);
zx[i][j]=max(zx[i+][j],sum);
}
}
Rep(i,n,) {
int sum=;
Rep(j,m,) {
sum=max(sum,c[i][j]);
yx[i][j]=max(yx[i+][j],sum);
}
} int tp=;
For(i,k,n) {
For(j,k,m) {
int tpp=max(max(ZS(i,j-k),ZS(i-k,m)),YS(i,j+k))+c[i][j];
tp=max(tp,tpp);
ans=max(ans,tp+ZX(i+k,m));
}
}
tp=;
Rep(i,n,k) {
For(j,k,m) {
int tpp=max(max(ZX(i,j-k),ZX(i+k,m)),YX(i,j+k))+c[i][j];
tp=max(tp,tpp);
ans=max(ans,tp+ZS(i-k,m));
}
}
tp=;
For(j,k,m) {
For(i,k,n) {
int tpp=max(max(ZS(i-k,j),ZS(n,j-k)),ZX(i+k,j))+c[i][j];
tp=max(tp,tpp);
ans=max(ans,tp+YS(n,j+k));
}
}
tp=;
Rep(j,m,k) {
For(i,k,n) {
int tpp=max(max(YS(i-k,j),YS(n,j+k)),YX(i+k,j))+c[i][j];
tp=max(tp,tpp);
ans=max(ans,tp+ZS(n,j-k));
}
}
printf("%d\n",ans);
Formylove;
}
t3跳呀跳
太菜了,不说什么了。
容易想到确定一行一列就可以确定整个矩阵,然后限制不知道怎么用。
1的个数为奇数,我竟然没有往异或上想,大概是个智障吧。
枚举a1,然后根据限制用带权并查集维护a1~a_{n+m-1}之间的关系即可。
对于直接限制a1~a_{n+m-1}的可以新建点a_{n+m}代表权值为0
//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 p=1e9+,N=2e6+;
typedef long long LL;
typedef double db;
using namespace std;
int n,m,k,x[N],y[N],w[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;
} LL ksm(LL a,LL b) {
LL rs=,bs=a;
while(b) {
if(b&) rs=rs*bs%p;
bs=bs*bs%p;
b>>=;
}
return rs;
} int fa[N],fdis[N];
int find(int x) {
if(x==fa[x]) return x;
int y=find(fa[x]);
fdis[x]^=fdis[fa[x]];
fa[x]=y; return y;
} LL solve(int o) {
For(i,,n+m) fa[i]=i,fdis[i]=; //n+m:0
For(i,,k) {
int u=x[i]+m-,v=y[i],ww=w[i];
int fu=find(u),fv=find(v);
if(x[i]==&&y[i]==) continue;
if(x[i]==||y[i]==) {
if(y[i]==) swap(u,v),swap(fu,fv);
if(fv==n+m&&fdis[v]!=ww) return ;
if(fv!=n+m) {
fa[fv]=n+m;
fdis[fv]=(fdis[v]^ww);
}
}
else if(fu==fv) {
if((ww^o^^fdis[u]^fdis[v])!=) return ;
else continue;
}
else {
if(fu==n+m) swap(u,v),swap(fu,fv);
fa[fu]=fv;
fdis[fu]=(ww^o^^fdis[u]^fdis[v]);
}
}
LL rs=;
For(i,,n+m-) if(find(i)==i)
rs++;
return ksm(2LL,rs);
} #define ANS
int main() {
#ifdef ANS
freopen("jump.in","r",stdin);
freopen("jump.out","w",stdout);
#endif
read(n); read(m); read(k);
int fl=-;
For(i,,k) {
read(x[i]); read(y[i]); read(w[i]);
if(x[i]==&&y[i]==) fl=w[i];
}
LL ans;
if(fl==-) ans=(solve()+solve())%p;
else ans=solve(fl);
printf("%lld\n",ans);
Formylove;
}
暑假集训test-8-26的更多相关文章
- 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暑假集训总结-致将走上大三征途的我
回想起这个暑假,从开始与雄鹰一起的纠结要不要进集训队,与吉吉博博组队参加地大邀请赛,害怕进不了集训队.当时激励我月份开始接触的,记得当时在弄运动会来着,然后就问了雄鹰一些输入输出的东西,怀着满心的期待 ...
- [补档]暑假集训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 ...
- [补档]暑假集训D6总结
考试 不是爆零,胜似爆零= = 三道题,就拿了20分,根本没法玩好吧= = 本来以为打了道正解,打了道暴力,加上个特判分,应该不会死的太惨,然而--为啥我只有特判分啊- - 真的是惨. 讲完题觉得题是 ...
- [补档]暑假集训D3总结
考试 集训第一次考试,然而- - 总共四道题,两道打了DFS,一道暴力,一道~~输出样例~~乱搞,都是泪啊- - 目前只改了三道,回头改完那道题再上题解吧- - T2 [Poi2010]Monot ...
随机推荐
- springMvc框架之Restful风格
method: @Controller @RequestMapping("/test") public String MyController{ @RequestMapping(& ...
- session之memcache
nginx服务器配置:192.168.200.111[root@nginx ~]# hostname nginx[root@nginx ~]# bash[root@nginx ~]# vim /usr ...
- openwrt redis
2071 make V=s 2072 cd build_dir/target-x86_64_uClibc-0.9.33.2/root-x86/ cd package/network/services/ ...
- win10 快速访问存在 2345Downloads 删除解决方案
有时候重装新系后统会发有很多自己不喜欢的捆绑程序,比如2345辣鸡浏览器 这个时候很多人会选择卸载,然后把文件夹位置删除 但是删除后会发现有一个地方一直还在那就是现快速访问的位置里面 这个位置由于卸载 ...
- bzoj3505: [Cqoi2014]数三角形 [数论][gcd]
Description 给定一个nxm的网格,请计算三点都在格点上的三角形共有多少个.下图为4x4的网格上的一个三角形. 注意三角形的三点不能共线. Input 输入一行,包含两个空格分隔的正整数m和 ...
- Prometheus监控node-exporter常用指标含义
一.说明 最近使用Prometheus新搭建监控系统时候发现内存采集时centos6和centos7下内存监控指标采集计算公式不相同,最后采用统一计算方法并整理计算公式如下: 1 100-(node_ ...
- NX二次开发-算法篇-vector函数排序(例子:遍历所有点并排序)
NX9+VS2012 #include <uf.h> #include <uf_ui.h> #include <uf_curve.h> #include <u ...
- Shader实现新手指引挖空圆形和矩形
这个是参考这个做的:https://blog.csdn.net/tracyzly/article/details/80279692 Shader "UI/ImageWithHole" ...
- hdu多校第一场1004(hdu6581)Vacation 签到
题意:有n+1辆车,每辆车都有一定的长度,速度和距离终点的距离,第1-n辆车在前面依次排列,第0辆车在最后面.不允许超车,一旦后车追上前车,后车就减速,求第0辆车最快什么时候能到达终点? 思路:对于每 ...
- Windows内存管理(2)--Lookaside结构 和 运行时函数
1. Lookaside结构 频繁的申请和回收内存,会导致在内存上产生大量的内存"空洞",从而导致最终无法申请内存.DDK为程序员提供了Lookaside结构来解决这个问 ...