不写那么多没用的了

开题就发现 \(T4\) 原题, \(T1\) 大水题。

然后发现 \(T4\) 忘了。。。。

不扯了

打地鼠

大水题,我代码都不想放。。。

算了,还是放一下吧。。



#include<bits/stdc++.h>
using std::cout; using std::endl;
#define try(i,a,b) for(register signed i=a;i<=b;++i)
#define throw(i,a,b) for(register signed i=a;i>=b;--i)
#define asm(i,x) for(register signed i=head[x];i;i=edge[i].next)
namespace xin_io
{
#define debug cout<<"debug"<<endl
#define sb(x) cout<<#x" = "<<x<<' '
#define jb(x) cout<<#x" = "<<x<<endl
#define gc() p1 == p2 and (p2 = (p1 = buf) + fread(buf,1,1<<20,stdin),p1 == p2) ? EOF : *p1++
#define scanf ak = scanf
int ak;
}
using namespace xin_io; static const int maxn = 2e3+10,inf = 1e9+7;
namespace xin
{
#define calc(x1,y1,x2,y2) (he[x2][y2] - he[x1-1][y2] - he[x2][y1-1] + he[x1-1][y1-1])
int he[maxn][maxn];
char s[maxn];
int n,k;
int maxx = -inf;
inline short main()
{
scanf("%d%d",&n,&k);
try(i,1,n)
{
scanf("%s",s+1);
try(j,1,n) he[i][j] = he[i-1][j] + he[i][j-1] - he[i-1][j-1] + (s[j] == '1');
}
if(k >= n) {cout<<he[n][n]<<endl; return 0;}
try(i,1,n - k + 1) try(j,1,n - k + 1)
// if(i + k - 1 <= n and j + k - 1 <= n)
{
maxx = std::max(maxx,calc(i,j,i+k-1,j+k-1));
}
cout<<maxx<<endl;
return 0;
}
}
signed main() {return xin::main();}

竞赛图

我们利用状态压缩枚举自己。

之后筛出来无效点。

预处理出来集合的交就行,



#include<bits/stdc++.h>
using std::cout; using std::endl;
#define try(i,a,b) for(register signed i=a;i<=b;++i)
#define throw(i,a,b) for(register signed i=a;i>=b;--i)
#define asm(i,x) for(register signed i=head[x];i;i=edge[i].next)
namespace xin_io
{
#define debug cout<<"debug"<<endl
#define sb(x) cout<<#x" = "<<x<<' '
#define jb(x) cout<<#x" = "<<x<<endl
#define gc() p1 == p2 and (p2 = (p1 = buf) + fread(buf,1,1<<20,stdin),p1 == p2) ? EOF : *p1++
#define scanf ak = scanf
char buf[1<<20],*p1 = buf,*p2 = buf; int ak; typedef long long ll; typedef unsigned long long ull;
class xin_stream{public:template<typename type>inline xin_stream &operator >> (type &x)
{
register type s = 0; register int f = 1; register char ch = gc();
while(!isdigit(ch)) {if(ch == '-') f = -1; ch = gc();}
while( isdigit(ch)) s = (s << 1) + (s << 3) + (ch xor 48),ch = gc(); return x = s * f,*this;
}}io;
}
using namespace xin_io; static const int maxn = 2e7+10,inf = 1e9+7; const ll llinf = 1e18+7;
namespace xin
{
#define lowbit(i) (i & -i)
bool vis[maxn];
int lian[maxn];
int T,n,ans;
inline short main()
{
io >> T;
while(T--)
{
io >> n; ans = 0;
memset(vis,1,sizeof(bool) * (1 << n));
memset(lian,0,sizeof(int) * (1 << n));
try(i,1,n) try(j,1,n)
{
register int x; io >> x;
if(x) lian[1 << (i - 1)] |= (1 << (j - 1));
}
int ms = (1 << n) - 1;
lian[0] = ms;
try(s,1,ms)
{
register int low = lowbit(s);
lian[s] = (lian[low] & lian[low xor s]);
}
try(s,1,ms)
{
if(vis[s])
for(register int t=lian[s];t;t=((t-1)&lian[s]))
vis[s|t] = false;
}
try(i,0,ms) ans += vis[i];
cout<<ans<<endl;
}
return 0;
}
}
signed main() {return xin::main();}

糖果

还没做出来,先咕了。。。

这个似乎是今年 \(noi\) 原题,然后并且这道题目出的比 \(noi\) 要早很多。。。。

然后就是 \(noi\) 出了一道原题。。。。

恐怖如斯。

这个其实就可以树剖一下。

之后我们每次操作就是把路径上的所有点染成一种全新的颜色。

用线段树维护一个区间的边两端不同的点的数量就行。。

然而。。。。

其实打一个标记就能迅速写过。。。

只不过是因为数据水。

我就是这样过的



#include<bits/stdc++.h>
using std::cout; using std::endl;
#define try(i,a,b) for(register signed i=a;i<=b;++i)
#define throw(i,a,b) for(register signed i=a;i>=b;--i)
#define asm(i,x) for(register signed i=head[x];i;i=edge[i].next)
namespace xin_io
{
#define debug cout<<"debug"<<endl
#define sb(x) cout<<#x" = "<<x<<' '
#define jb(x) cout<<#x" = "<<x<<endl
#define gc() p1 == p2 and (p2 = (p1 = buf) + fread(buf,1,1<<20,stdin),p1 == p2) ? EOF : *p1++
#define scanf ak = scanf
char buf[1<<20],*p1 = buf,*p2 = buf; int ak; typedef long long ll; typedef unsigned long long ull;
class xin_stream{public:template<typename type>inline xin_stream &operator >> (type &x)
{
register type s = 0; register int f = 1; register char ch = gc();
while(!isdigit(ch)) {if(ch == '-') f = -1; ch = gc();}
while( isdigit(ch)) s = (s << 1) + (s << 3) + (ch xor 48),ch = gc(); return x = s * f,*this;
}}io;
}
using namespace xin_io; static const int maxn = 1e6+10,inf = 1e9+7; const ll llinf = 1e18+7;
namespace xin
{
class xin_edge{public:int next,ver;}edge[maxn];
int head[maxn],zhi = 1;
inline void add(int x,int y) {edge[++zhi].ver = y; edge[zhi].next = head[x]; head[x] = zhi;}
int n,qnum;
int fa[maxn],dep[maxn],siz[maxn],hson[maxn],top[maxn],id[maxn],tot = 0;
void dfs1(int x,int f)
{
fa[x] = f; dep[x] = dep[f] + 1; siz[x] = 1;
for(register int i=head[x];i;i=edge[i].next)
{
register int y = edge[i].ver;
if(y == f) continue;
dfs1(y,x); siz[x] += siz[y];
if(siz[y] > siz[hson[x]]) hson[x] = y;
}
}
void dfs2(int x,int t)
{
top[x] = t;
if(hson[x]) dfs2(hson[x],t);
for(register int i=head[x];i;i=edge[i].next)
{
register int y = edge[i].ver;
if(y == fa[x] or y == hson[x]) continue;
dfs2(y,y);
}
}
inline int lca(int x,int y)
{
while(top[x] xor top[y])
{
if(dep[top[x]] < dep[top[y]]) std::swap(x,y);
x = fa[top[x]];
}
if(dep[x] > dep[y]) std::swap(x,y);
return x;
}
class xin_data
{
public:
int son1,son2;
xin_data(){}
xin_data(int x,int y):son1(x),son2(y){}
}d[maxn];
int val[maxn];
void update(int x,int y)
{
int allca = lca(x,y),pre_x = 0,pre_y = 0;
while(x xor allca)
{
val[x] = 0;
d[x] = xin_data(fa[x],pre_x);
pre_x = x;
x = fa[x];
}
while(y xor allca)
{
val[y] = 0;
d[y] = xin_data(fa[y],pre_y);
pre_y = y;
y = fa[y];
}
d[allca] = xin_data(pre_x,pre_y);
val[allca] = 1;
}
int query(int x,int y)
{
register int ret = 0,allca = lca(x,y);
while(x xor allca)
{
register int f = fa[x];
if((d[f].son1 or d[f].son2) and d[f].son1 != x and d[f].son2 != x) ret ++;
else ret += val[x];
x = f;
}
while(y xor allca)
{
register int f = fa[y];
if((d[f].son1 or d[f].son2) and d[f].son1 != y and d[f].son2 != y) ret ++;
else ret += val[y];
y = f;
}
return ret;
}
bool sp1 = 1;
class xin_seg
{
private:
#define ls(fa) (fa << 1)
#define rs(fa) (fa << 1 | 1)
inline void up(int fa) {t[fa].s = t[ls(fa)].s + t[rs(fa)].s;}
inline void down(int fa,int l,int r)
{
if(t[fa].debt == -1) return ;
t[ls(fa)].debt = t[rs(fa)].debt = t[fa].debt;
register int mid = l + r >> 1;
t[ls(fa)].s = t[fa].debt * (l - mid + 1); t[rs(fa)].s = t[fa].debt * (r - mid);
t[fa].debt = -1;
}
public:
class xin_tree{public:int s,debt;xin_tree():debt(-1){}}t[maxn];
void build(int fa,int l,int r)
{
if(l == r) return t[fa].s = 1,void();
register int mid = l + r >> 1;
build(ls(fa),l,mid); build(rs(fa),mid+1,r);
up(fa);
}
void update(int fa,int l,int r,int ql,int qr,int val)
{
if(ql <= l and qr >= r) {t[fa].s = val * (r - l + 1);t[fa].debt = val; return ;}
register int mid = l +r >> 1;
down(fa,l,r);
if(ql <= mid) update(ls(fa),l,mid,ql,qr,val);
if(qr > mid) update(rs(fa),mid+1,r,ql,qr,val);
up(fa);
}
int query(int fa,int l,int r,int ql,int qr)
{
if(ql <= l and qr >= r) return t[fa].s;
register int mid = l + r >> 1,ret = 0;
down(fa,l,r);
if(ql <= mid ) ret += query(ls(fa),l,mid,ql,qr);
if(qr > mid ) ret += query(rs(fa),mid+1,r,ql,qr);
return ret;
}
}t;
inline short main()
{
io >> n;
try(i,1,n-1)
{
register int x,y; io >> x >> y;
add(x,y); add(y,x);
if((x != y - 1) and (x != y + 1)) sp1 = 0;
val[i+1] = 1;
}
dfs1(1,0); dfs2(1,1);
if(sp1)
{
t.build(1,1,n);
io >> qnum;
try(que,1,qnum)
{
register int op,x,y; io >> op >> x >> y;
if(y < x) std::swap(x,y);
if(op == 1)
{
t.update(1,1,n,x + 1,y,0);
t.update(1,1,n,x,x,1);
t.update(1,1,n,y+1,y+1,1);
}
else
printf("%d\n",t.query(1,1,n,x+1,y));
}
return 0;
}
io >> qnum;
try(que,1,qnum)
{
register int op; io >> op;
if(op == 1)
{
register int x,y; io >> x >> y;
update(x,y);
}
else
{
register int x,y; io >> x >> y;
printf("%d\n",query(x,y));
}
}
return 0;
}
}
signed main() {return xin::main();}

[考试总结]noip模拟39的更多相关文章

  1. 2021.8.14考试总结[NOIP模拟39]

    T1 打地鼠 全场就俩人没切,还有一个是忘关$freopen$了. $code:$ 1 #include<bits/stdc++.h> 2 #define rin register sig ...

  2. 6.17考试总结(NOIP模拟8)[星际旅行·砍树·超级树·求和]

    6.17考试总结(NOIP模拟8) 背景 考得不咋样,有一个非常遗憾的地方:最后一题少取膜了,\(100pts->40pts\),改了这么多年的错还是头一回看见以下的情景... T1星际旅行 前 ...

  3. 5.23考试总结(NOIP模拟2)

    5.23考试总结(NOIP模拟2) 洛谷题单 看第一题第一眼,不好打呀;看第一题样例又一眼,诶,我直接一手小阶乘走人 然后就急忙去干T2T3了 后来考完一看,只有\(T1\)骗到了\(15pts\)[ ...

  4. 5.22考试总结(NOIP模拟1)

    5.22考试总结(NOIP模拟1) 改题记录 T1 序列 题解 暴力思路很好想,分数也很好想\(QAQ\) (反正我只拿了5pts) 正解的话: 先用欧拉筛把1-n的素数筛出来 void get_Pr ...

  5. 2021.9.17考试总结[NOIP模拟55]

    有的考试表面上自称NOIP模拟,背地里却是绍兴一中NOI模拟 吓得我直接文件打错 T1 Skip 设状态$f_i$为最后一次选$i$在$i$时的最优解.有$f_i=max_{j<i}[f_j+a ...

  6. [考试总结]noip模拟23

    因为考试过多,所以学校的博客就暂时咕掉了,放到家里来写 不过话说,vscode的markdown编辑器还是真的很好用 先把 \(noip\) 模拟 \(23\) 的总结写了吧.. 俗话说:" ...

  7. 「考试」noip模拟9,11,13

    9.1 辣鸡 可以把答案分成 每个矩形内部连线 和 矩形之间的连线 两部分 前半部分即为\(2(w-1)(h-1)\),后半部分可以模拟求(就是讨论四种相邻的情况) 如果\(n^2\)选择暴力模拟是有 ...

  8. 6.11考试总结(NOIP模拟7)

    背景 时间分配与得分成反比,T1 20min 73pts,T2 1h 30pts,T3 2h 15pts(没有更新tot值,本来应该是40pts的,算是本次考试中最遗憾的地方了吧),改起来就是T3比较 ...

  9. 6.10考试总结(NOIP模拟6)

    前言 就这题考的不咋样果然还挺难改的.. T1 辣鸡 前言 我做梦都没想到这题正解是模拟,打模拟赛的时候看错题面以为是\(n\times n\)的矩阵,喜提0pts. 解题思路 氢键的数量计算起来无非 ...

随机推荐

  1. sort,uniq,tr,cut,eval命令

    目录 一.排序命令sort 1.格式 2.常用选项 3.例子 二.去除重复行操作命令uniq 1.格式 2.常用选项 3.示例 三.字符转换命令tr 1.格式 2.常用选项 3.参数 4.示例 四.数 ...

  2. kali linux 的ssh服务器拒绝了密码 请再试一次

    1.配置kali linux下的SSH,默认情况下kali下的SSH不允许root用户远程登录SSH,需要修改配置文件 /etc/ssh/sshd_config,修改PermitRootLogin y ...

  3. C++面向对象 1(类-封装)

    1 //类和对象 2 //C++ 面向对象 三大特性 : 封装 继承 多态 3 4 //设计一个圆类,求圆的周长 5 //圆周长 = 2*PI * 半径 6 7 #include <iostre ...

  4. 双非本科字节跳动Android面试题分享(已拿offer)

    基本情况 本人系非985非211普通本科生一枚,有实习有项目经历但成绩普通,在面试前刷了很多面经.面试题,这里也把自己的分享下,做个回报好了,顺便攒攒人品,一到这种时候人就迷信起来了. 面试是以视频面 ...

  5. dubbo学习实践(3)之Dubbo整合Consul及Dubbo配置方式

    前言:上一篇中,已经写到了使用zookeeper为注册中心的配置,下面写下配置Consul为注册中心 1. Consul注册中心验证 修改provider和consumer的服务配置文件 Provid ...

  6. Mina的JMX支持

    以下是一个增加了JMX支持的Mina Echo Server. package org.apache.mina.echoServer; import java.lang.management.Mana ...

  7. etcd学习(6)-etcd实现raft源码解读

    etcd中raft实现源码解读 前言 raft实现 看下etcd中的raftexample newRaftNode startRaft serveChannels 领导者选举 启动并初始化node节点 ...

  8. SpringBoot开发三

    需求介绍-SpringMVC 服务层的三层架构:表现层,业务层,数据层,浏览器访问服务器先访问表现层,期待表现层返回一些数据,表现层呢就访问业务层处理业务,而业务层在处理业务的时候会调用数据层请求数据 ...

  9. BaiduSpider:爬取百度的利器

    视频链接:https://www.zhihu.com/zvideo/1272864710321516544 BaiduSpider是一个能够爬取百度搜索结果的Python爬虫,轻量但强大.目前支持百度 ...

  10. @ConfigurationProperties实现自定义配置绑定

    @ConfigurationProperties使用 创建一个类,类名上方注解,配置prefix属性,如下代码: @ConfigurationProperties( prefix = "he ...