真 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;
}

最新文章

  1. Request —— 让 Node.js http请求变得超简单
  2. 华硕笔记本U盘启动系统/WinPE报错。Windows failed to start. A Recent hardware or software change might be the cause.
  3. 转: git复制到非空目录
  4. 深入理解PHP内核(十四)类的成员变量及方法
  5. LintCode Search a 2D Matrix II
  6. Python入门笔记(26):Python执行环境
  7. jquery JSON的解析方式
  8. linux 虚拟机设置IP访问外网
  9. Ural 1309 Dispute (递归)
  10. Python3 TA-Lib
  11. JDK源码分析-String、StringBuilder、StringBuffer
  12. redisson整合spring
  13. DNS缓存服务器与转发服务器
  14. 支持异步同步的分布式CommandBus MSMQ实现 - 支持Session传递、多实例处理
  15. JavaScript基础笔记(四) JS式面向对象
  16. linux 保留文件 其余删除
  17. 架构师成长之路6.4 DNS服务器搭建(部署主从DNS)
  18. Druid介绍2
  19. WPF 各种绑定写法以及用法
  20. log4j介绍和使用

热门文章

  1. 5.1中容器(Container)和门面(Facade)的实现
  2. JFinal教程
  3. C中为什么不能用==比较字符串?
  4. wordpress添加视频弹窗插件Video PopUp
  5. 配置类一@Configuration
  6. Delphi txt文件读取及写入
  7. 「题解」:07.16NOIP模拟T2:通讯
  8. 37 VTK中的坐标系系统
  9. delphi 压缩
  10. CF1265B Beautiful Numbers