真 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的更多相关文章

  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. [补档]暑假集训D5总结

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

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

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

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

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

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

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

  10. [补档]暑假集训D3总结

    考试 集训第一次考试,然而- -   总共四道题,两道打了DFS,一道暴力,一道~~输出样例~~乱搞,都是泪啊- - 目前只改了三道,回头改完那道题再上题解吧- - T2 [Poi2010]Monot ...

随机推荐

  1. g++优化开关(暴力必备)

    ) %:pragma GCC optimize("Ofast") %:pragma GCC optimize("inline") %:pragma GCC op ...

  2. tcmalloc jemalloc 和ptmalloc 对比

    ptmalloc 是glibc的内存分配管理 tcmalloc 是google的内存分配管理模块 jemalloc 是BSD的提供的内存分配管理 三者的性能对比参考从网上的一个图如下: 自己测试了一下 ...

  3. 2.Struts2配置文件

    1.配置文件的加载顺序 0. 需要掌握         * 加载了哪些个配置文件(重点的)         * 配置文件的名称是什么         * 配置文件的位置         * 配置文件的 ...

  4. shell 例子

    shell编程入门 http://www.runoob.com/linux/linux-shell-variable.html http://c.biancheng.net/cpp/shell/ .查 ...

  5. 解决 AUTH` failed: ERR Client sent AUTH, but no password is set [tcp://127.0.0.1:6379]

    页面报错: ConnectionException In AbstractConnection.php line 155 AUTH` failed: ERR Client sent AUTH, but ...

  6. Shell case in语句详解

    和其它编程语言类似,Shell 也支持两种分支结构(选择结构),分别是 if else 语句和 case in 语句.在<Shell if else>一节中我们讲解了 if else 语句 ...

  7. phpstrom 注释效果

    /** * .,:,,, .::,,,::. * .::::,,;;, .,;;:,,....:i: * :i,.::::,;i:. ....,,:::::::::,.... .;i:,. ..... ...

  8. hive shell参数

    Hive Shell参数 1.Hive命令行 语法结构 hive [-hiveconf x=y]* [<-i filename>]* [<-f filename>|<-e ...

  9. 牛客网 NOIP赛前集训营-普及组(第四场)C--部分和 (高维前缀和)

    传送门 解题思路 高维前缀和模板题.首先,求前缀和有两种方式,比如说对于求二维前缀和来说. 第一种 : for(int i=1;i<=n;i++) for(int j=1;j<=n;j++ ...

  10. NOIp2018集训test-9-17(am)

    这是一套去年在长沙考过的题,但是我当时就没理清楚+没写题解(我以前很多博客都写得跟shi一样,完全没有意义,看到就想打当时的我),所以又考得稀烂. T1.star way to heaven 容易想到 ...