暑假集训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 ...
随机推荐
- 21-7-数组相关api
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- canvas-nest.js 设置网页背景
只需要在HTML,body中加如这行代码就可以实现效果,可以在color中修改颜色 <!DOCTYPE html> <html> <head> <meta c ...
- Centos 安装php Imagick 扩展
从 centos 仓库安装 首先安装 php-pear php-devel,gcc三个软件包 yum install php-pear php-devel gcc 通过 yum 安装Centos 官方 ...
- Redis缓存数据库简单介绍
\ 1.什么是redis redis是一种基于内存的高性能键值型数据库(key-value),属于NoSQL,和 Memcached 类似: 从内存读取速度为110000次/s,写入内存速度为8100 ...
- springboot java.util.NoSuchElementException: No value present 异常处理
使用jpa查询的时候,如果查询不到数据,就会返回这个错误,下面是处理方法. @Override public User findByEmail(String email) { User user = ...
- QueryList采集页面链接及对应标题
<?php header('content-type:text/html;charset=utf-8'); require 'vendor/autoload.php'; use QL\Query ...
- 模拟+算贡献——cf1195D
比赛的时候没看到模数,用java大数在写,最后看到的时候已经慌了.. 把贡献算清楚就可以 下面是贡献的推导 有五位数 abcde * 10个 有两位数 fg * 3 个 那么这两种数组成的情况就是 a ...
- Lua的控制流程
一.条件语句 if语句 if语句是由一个布尔表达式作为条件判断,或者紧跟其他语句组成. if else语句 if语句可以是else搭配使用,在if条件表达式为false时执行else语句代码 if嵌套 ...
- NX二次开发-遍历当前part所有component,把装配子部件设置成工作部件
NX11+VS2013 #include <uf.h> #include <uf_disp.h> #include <uf_modl.h> #include < ...
- NX二次开发-C++ DeleteFile删除文件实例代码
NX9+VS2012 #include<Windows.h> DeleteFile("D:\\1\\test123.prt"); Caesar卢尚宇 2019年7月29 ...