不写那么多没用的了

开题就发现 \(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. JUC学习笔记(二)

    JUC学习笔记(一)https://www.cnblogs.com/lm66/p/15118407.html 1.Lock接口 1.1.Synchronized 1.1.1.Synchronized关 ...

  2. linux50个常用命令

    1.存放用户账号的文件在哪里? /etc/passwd 2.如何删除一个非空的目录? rm -rf 目录名 3.查看当前的工作目录用什么命令? pwd 4.创建一个文件夹用什么命令? mkdir 5. ...

  3. javaScript学习DOM模型

    DOM 全称是 Document Object Model 文档对象模型大白话,就是把文档中的标签,属性,文本,转换成为对象来管理                                   ...

  4. Python语言系列-10-数据库

    MySQL 基础环境准备 readme.txt 作者:Alnk(李成果) 版本:v1.0 安装mysql数据库 略 创建student库 # mysql> create database stu ...

  5. python爬虫:了解JS加密爬取网易云音乐

    python爬虫:了解JS加密爬取网易云音乐 前言 大家好,我是"持之以恒_liu",之所以起这个名字,就是希望我自己无论做什么事,只要一开始选择了,那么就要坚持到底,不管结果如何 ...

  6. Java之Cookie与Session

    Cookie.Session Cookie:服务端生成Cookie发给客户端用于认证 Session:服务端进行进行登记,每人有不同的Session session与cookie的区别 Cookie: ...

  7. Innodb中怎么查看锁信息

    一.前言 上一篇说了下innodb中锁的大概意思, 这篇说说怎么查看加的哪些锁.不然后续出现死锁或者锁等待都不知道为什么. 二.底层基础表信息 在学会如何查看有哪些锁信息时, 需要了解一些基础表信息, ...

  8. CTFre-getit-WP

    攻防世界getit-WP 日子忙起来人也就忙,CTF慢慢刷,慢就是快. 下载之后,也没管别的直接就IDA打开:下载之后,也没管别的直接就IDA打开: 随便点点看得到三个可以字符串.F5看看: 懂个大概 ...

  9. SQL 练习23

    查询男生.女生人数 SELECT Ssex,COUNT(Ssex) 人数 from Student GROUP BY Ssex

  10. 【网络编程】TCPIP-小笔记集合

    目录 前言 TCP/IP 网络编程笔记散集 参考 前言 主要记录TCPIP一些小笔记 说明: demo 基于 Linux. TCP/IP 网络编程笔记散集 快速入门: I/O 缓冲: I/O 缓冲在每 ...