T1 玩水

成功在考试的时候注释掉正解,换成了暴力,只因为不敢保证正解思路的正确

脑子瓦特了,不知道把暴力打成函数拼在一起,不知道当时咋想的。。。。

就是你找有没有一个点上面和左面的字符一样,

如果这两个点有相邻关系或者包含关系就有解(包含关系是说一个点在另一个点的右下,不在同一行一列)

 1 #include<bits/stdc++.h>
2 #define int long long
3 typedef unsigned long long ULL;
4 using namespace std;
5 namespace AE86{
6 inline int read(){
7 int x=0,f=1;char ch=getchar();
8 while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
9 while(ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+(ch^48);ch=getchar();}return x*f;
10 }inline void write(int x,char opt='\n'){
11 char ch[20];int len=0;if(x<0)x=~x+1,putchar('-');
12 do{ch[len++]=x%10+(1<<5)+(1<<4);x/=10;}while(x);
13 for(register int i=len-1;i>=0;--i)putchar(ch[i]);putchar(opt);}
14 }using namespace AE86;
15 const int NN=1005;
16 int n,m,a[NN][NN],T;
17 char s[NN];
18 bool f[NN][NN];
19 namespace WSN{
20 inline short main(){
21 // freopen("in.in","r",stdin);
22 freopen("water.in","r",stdin);
23 freopen("water.out","w",stdout);
24 T=read();
25 while(T--){
26 n=read(); m=read(); memset(f,0,sizeof(f)); bool flag=0;
27 for(int i=1;i<=n;i++){
28 scanf("%s",s+1);
29 for(int j=1;j<=m;j++) a[i][j]=(s[j]-'a'+1);
30 }
31 for(int i=2;i<=n;i++) for(int j=2;j<=m;j++)
32 f[i][j]=(a[i-1][j]==a[i][j-1]);
33 for(int i=1;i<=n;i++){
34 for(int j=1;j<=m;j++) if(f[i][j]){
35 if(f[i+1][j]){flag=1;break;}
36 if(f[i][j+1]){flag=1;break;}
37 for(int k=i+1;k<=n;k++){
38 for(int u=j+1;u<=m;u++)
39 if(f[k][u]){flag=1;break;}
40 if(flag) break;
41 }
42 }
43 if(flag) break;
44 }
45 puts(flag?"1":"0");
46 }
47 return 0;
48 }
49 }
50 signed main(){return WSN::main();}

T2 假人

暴力的背包$dp$比较好打,但是正解目前还不会。。。

 1 #include<bits/stdc++.h>
2 #define int long long
3 using namespace std;
4 namespace AE86{
5 inline int read(){
6 int x=0,f=1;char ch=getchar();
7 while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
8 while(ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+(ch^48);ch=getchar();}return x*f;
9 }inline void write(int x,char opt='\n'){
10 char ch[20];int len=0;if(x<0)x=~x+1,putchar('-');
11 do{ch[len++]=x%10+(1<<5)+(1<<4);x/=10;}while(x);
12 for(register int i=len-1;i>=0;--i)putchar(ch[i]);putchar(opt);}
13 }using namespace AE86;
14 const int NN=1e5+5;
15 int n,k[NN],a[NN][6],tmp,rp;
16 inline void task1(){
17 int ans=0;
18 for(int i=1;i<=n;i++) ans+=a[i][1];
19 write(ans);
20 }
21 vector<pair<int,int> > pre;
22 int t,bin[NN*5],tot;
23 inline void dfs(int cnt){
24 if(cnt>n){
25 t=0;tot=0;
26 for(int i=0;i<pre.size();i++)
27 t+=pre[i].second,tot+=pre[i].first;
28 bin[t]=max(bin[t],tot);
29 return;
30 }
31 for(int i=1;i<=k[cnt];i++){
32 pre.push_back(make_pair(a[cnt][i],i));
33 dfs(cnt+1);
34 pre.pop_back();
35 }
36 }
37 inline void task2(){
38 dfs(1);
39 for(int i=n;i<=rp;i++) write(bin[i],' ');
40 puts("");
41 }
42 int f[3001][15005],sum;
43 inline void task3(){
44 sum=k[1];
45 for(int i=1;i<=k[1];++i) f[1][i]=a[1][i];
46 for(int i=2;i<=n;++i){
47 for(int j=i-1;j<=sum;++j)
48 for(int u=1;u<=k[i];++u)
49 f[i][j+u]=max(f[i][j+u],f[i-1][j]+a[i][u]);
50 sum+=k[i];
51 }
52 for(int i=n;i<=rp;i++) write(f[n][i],' '); puts("");
53 }
54 namespace WSN{
55 inline short main(){
56 freopen("fake.in","r",stdin);
57 freopen("fake.out","w",stdout);
58 n=read();
59 for(int i=1;i<=n;i++){
60 k[i]=read(); if(k[i]==1) ++tmp; rp+=k[i];
61 for(int j=1;j<=k[i];j++) a[i][j]=read();
62 }
63 if(tmp==n) return task1(),0;
64 if(n<=5) return task2(),0;
65 task3();
66 return 0;
67 }
68 }
69 signed main(){return WSN::main();}

TLE 40

T3 切题

比较隐含的线段树维护式子。

首先,暴力是网络流,(当然贪心也可以,但是不会太启发正解)

那么当他满流的时候就是合法的,考虑何时满流,满流的时候$maxflow=\sum\limits_{i=1}^{n}a_i$,把$a$从大到小排序的话

条件合法就会有$\forall k \in [0,n] \sum\limits_{i=1}^{k}a_i\leq \sum\limits_{i=1}^{m}\min(b_i,k)$

考虑优化,设$c_k$表示$b_i \geq k$的个数,那么$\sum\limits_{i=1}^{m}\min(b_i,k)=\sum\limits_{i=1}^{k}c_i$

那么合法的条件转化为$\forall k \in [0,n] \sum\limits_{i=1}^{k}(c_i-a_i) \geq 0$

我们用线段树维护这个式子的前缀和,下标为$k$,

考虑$1,2$操作,找到$a[x]$最后一次/第一次出现的位置,然后在线段树上区间修改即可(因为是维护前缀和)

可以用树状数组,可以用$\textit{upper_bound}$,不推荐后者,会调死,于是手打了$\textit{upper_bound}$

$3,4$操作直接考虑加减$b[x]$只会对$c_{b_x+1},c_{b_x-1}$有影响,然而$c_{b[x]-1}$的影响不用考虑,在之前已经计算,所以直接修改后面的值即可。

 1 #include<bits/stdc++.h>
2 #define int long long
3 using namespace std;
4 namespace AE86{
5 inline int read(){
6 int x=0,f=1;char ch=getchar();
7 while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
8 while(ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+(ch^48);ch=getchar();}return x*f;
9 }inline void write(int x,char opt='\n'){
10 char ch[20];int len=0;if(x<0)x=~x+1,putchar('-');
11 do{ch[len++]=x%10+(1<<5)+(1<<4);x/=10;}while(x);
12 for(register int i=len-1;i>=0;--i)putchar(ch[i]);putchar(opt);}
13 }using namespace AE86;
14 const int NN=250005;
15 int n,m,a[NN],b[NN],q,sma,smb,c[NN],s[NN],tot;
16 struct BIT{
17 int tr[NN];
18 inline int lowbit(int x){return x&(-x);}
19 inline void update(int x,int v){for(int i=x+1;i;i-=lowbit(i))tr[i]+=v;}
20 inline int query(int x,int ans=0){for(int i=x+1;i<NN;i+=lowbit(i))ans+=tr[i];return ans;}
21 }t;
22 struct SNOWtree{
23 #define lid (id<<1)
24 #define rid (id<<1|1)
25 int mn[NN<<2],laz[NN<<2];
26 int ll[NN<<2],rr[NN<<2];
27 inline void build(int id,int l,int r){
28 ll[id]=l; rr[id]=r;if(l==r) return;
29 int mid=l+r>>1;
30 build(lid,l,mid); build(rid,mid+1,r);
31 }
32 inline void pushup(int id){
33 if(ll[id]==rr[id]) return;
34 mn[id]=min(mn[lid],mn[rid]);
35 }
36 inline void pushdown(int id){
37 if(laz[id]==0||ll[id]==rr[id]) return;
38 laz[lid]+=laz[id];laz[rid]+=laz[id];
39 mn[lid]+=laz[id]; mn[rid]+=laz[id];
40 laz[id]=0;
41 }
42 inline void insert(int id,int pos,int v){
43 if(ll[id]==rr[id]) {mn[id]=v;return;}
44 int mid=ll[id]+rr[id]>>1;
45 if(pos<=mid) insert(lid,pos,v);
46 else insert(rid,pos,v);
47 pushup(id);
48 }
49 inline void update(int id,int l,int r,int v){
50 if(l<=ll[id]&&rr[id]<=r){mn[id]+=v,laz[id]+=v;return;}
51 pushdown(id);int mid=ll[id]+rr[id]>>1;
52 if(l<=mid) update(lid,l,r,v);
53 if(r>mid) update(rid,l,r,v);
54 pushup(id);
55 }
56 }tr;
57 inline bool cmp(int a,int b){return a>b;}
58 inline int upper_bound(int x){
59 int l=1,r=n,ans=0;
60 while(l<=r){
61 int mid=l+r>>1;
62 if(s[mid]>x) l=mid+1,ans=mid;
63 else r=mid-1;
64 }
65 return ans;
66 }
67 namespace WSN{
68 inline short main(){
69 freopen("problem.in","r",stdin);
70 freopen("problem.out","w",stdout);
71 n=read(); m=read();
72 for(int i=1;i<=n;i++) a[i]=read(),sma+=a[i],s[i]=a[i];
73 for(int i=1;i<=m;i++) b[i]=read(),smb+=b[i],t.update(b[i],1);
74 sort(s+1,s+n+1,cmp); s[0]=1e18; s[n+1]=-1; tr.build(1,1,n);
75 for(int i=1;i<=n;i++) c[i]=t.query(i),tot+=c[i]-s[i],tr.insert(1,i,tot);
76 q=read(); int opt,x;
77 while(q--){
78 opt=read(),x=read();
79 if(opt==1){
80 int pos=upper_bound(a[x])+1; ++a[x];
81 ++s[pos];if(s[pos]>s[pos-1]) swap(s[pos],s[pos-1]);
82 tr.update(1,pos,n,-1);
83 }
84 if(opt==2){
85 int pos=upper_bound(a[x]-1); --a[x];
86 --s[pos];if(s[pos]<s[pos+1]) swap(s[pos],s[pos+1]);
87 tr.update(1,pos,n,1);
88 }
89 if(opt==3) tr.update(1,b[x]+1,n,1),++b[x];
90 if(opt==4) tr.update(1,b[x],n,-1),--b[x];
91 puts(tr.mn[1]>=0?"1":"0");
92 }
93 return 0;
94 }
95 }
96 signed main(){return WSN::main();}

T4 天下第一

$splay$都忘了,还要我写$LCT$?

于是还在学习$LCT$,并不会切

Noip模拟68 2021.10.4的更多相关文章

  1. Noip模拟70 2021.10.6

    T1 暴雨 放在第一道的神仙题,不同的做法,吊人有的都在用线段树维护$set$预处理 我是直接$dp$的,可能代码的复杂度比那种的稍微小一点 设$f[i][j][p][0/1]$表示考虑了前$i$列, ...

  2. Noip模拟76 2021.10.14

    T1 洛希极限 上来一道大数据结构或者单调队列优化$dp$ 真就没分析出来正解复杂度 正解复杂度$O(q+nm)$,但是据说我的复杂度是假的 考虑一个点转移最优情况是从它上面的一个反$L$形转移过来 ...

  3. Noip模拟69 2021.10.5

    考场拼命$yy$高精度结果没学好$for$循环痛失$50pts$,当场枯死 以后一定打对拍,要不考后会... T1 石子游戏 首先要知道典型的$NIM$博弈,就是说如果所有堆石子个数的异或和为$0$则 ...

  4. Noip模拟81 2021.10.20

    T1 语言 比较简单的题,然后就瞎写了,所以考场上就我一个写了线段树的,所以我的常数.... 所以就枚举动词的位置,找前面后面有没有出现$4$即可 1 #include<bits/stdc++. ...

  5. Noip模拟83 2021.10.26

    T1 树上的数 有手就能在衡中$OJ$上过,但是$WaitingCoders$不行,就是这样 必须使用$O(n)$算法加上大力卡常,思路就是找子树内没更新的更新,更新过了直接$return$ 1 #i ...

  6. Noip模拟80 2021.10.18

    预计得分:5 实际得分:140?????????????? T1 邻面合并 我考场上没切掉的大水题....(证明我旁边的cty切掉了,并觉得很水) 然而贪心拿了六十,离谱,成功做到上一篇博客说的有勇气 ...

  7. Noip模拟79 2021.10.17(题目名字一样)

    T1 F 缩点缩成个$DAG$,然后根据每个点的度数计算期望值 1 #include<cstdio> 2 #include<cstring> 3 #include<vec ...

  8. Noip模拟78 2021.10.16

    这次时间分配还是非常合理的,但可惜的是$T4$没开$\textit{long long}$挂了$20$ 但是$Arbiter$上赏了蒟蒻$20$分,就非常不错~~~ T1 F 直接拿暴力水就可以过,数 ...

  9. Noip模拟77 2021.10.15

    T1 最大或 $T1$因为没有开$1ll$右移给炸掉了,调了一年不知道为啥,最后实在不懂了 换成$pow$就过掉了,但是考场上这题耽误了太多时间,后面的题也就没办法好好打了.... 以后一定要注意右移 ...

随机推荐

  1. 开源自己编写的半人工标注平台PaddleOCRLabel(.NET Winform版本)

    大家好, 我是博客园的老用户了,许久不做.NET技术了,从2013年起,开始从事App技术,写过书,在Linux上搭建区块链,用GO写智能合约,使用nodejs搭建过微服务,用python写过爬虫,写 ...

  2. Sentry 后端监控 - 最佳实践(官方教程)

    系列 1 分钟快速使用 Docker 上手最新版 Sentry-CLI - 创建版本 快速使用 Docker 上手 Sentry-CLI - 30 秒上手 Source Maps Sentry For ...

  3. hyperf从零开始构建微服务(二)——构建服务消费者

    阅读目录 构建服务消费者 安装json rpc依赖 安装JSON RPC客户端 server配置 编写业务代码 编写服务消费者类 consumer配置 配置 UserServiceInterface ...

  4. private关键字理解

    private 意思: 私有的 私人的 不公开的 private 是一个修饰符可以用来修饰成员变量和方法 被private修饰的成员变量或成员方法,只能在本类中访问,针对private修饰的成员变量, ...

  5. golang 注释 exported function xxx should have comment or be unexported

    0x00 问题 exported function xxx should have comment or be unexported. 0x01 解决 https://golang.org/s/sty ...

  6. java.net.NoRouteToHostException: 无法指定被请求的地址

    今天压力测试时, 刚开始出现了很多异常, 都是 java.net.NoRouteToHostException: Cannot assign requested address.  经网上查资料, 是 ...

  7. POJ2251——Dungeon Master(三维BFS)

    和迷宫问题区别不大,相比于POJ1321的棋盘问题,这里的BFS是三维的,即从4个方向变为6个方向. 用上队列的进出操作较为轻松. #include<iostream> #include& ...

  8. PHP中的文件系统函数(二)

    这次我们来学习的是一些不是太常用,但却也非常有用的一些函数.它们中有些大家可能见过或者使用过,有一些可能就真的没什么印象了.它们都是 PHP 中文件系统相关操作函数的一部分.存在即合理,或许只是我们的 ...

  9. Java基础系列(36)- 数组三种初始化及内存分析

    内存分析 数组三种初始化 静态初始化 int[] a = {1,2,3}; Man[] mans = {new Man(1,1),new Man(2,2)} 动态初始化 int[] a = new i ...

  10. (原创)一步步优化业务代码之——从数据库获取DataTable并绑定到List<Class>

    一,前言 现实业务当中,有一个很常见的流程:从数据库获取数据到DataTable,然后将DataTable绑定到实体类集合上,一般是List<Class>,代码写起来也简单:遍历+赋值就可 ...