字符串

题解

没看出catalan怎么办

dp打表啊!

考虑大力dp拿到30分好成绩!顺便收获一张表

打表发现$C_{n+m}^{m}-C_{n+m}^{m-1}$

仔细观察然后发现其实就是之前的网格那个题

那么我们回顾一下网格那个题

先看最简单的n==m情况

求左下角走到右上角方案数,不能经过中间那条线

考虑大力容斥,首先总方案数$C_{2*n}^{n}$很好求,那么我们现在任务就是求不合法的

我们考虑到如果经过中间那条线我们至少要经过红色那条线,考虑求从左下角超过那条蓝线(不合法)方案数,

如果有红线限制我们好像仍然难以求出,我们怎么消除红线影响

方法非常简单:考虑将正方形翻折,那么我们经过绿线走到右上角就转变为了沿绿线走再沿蓝线走方案,这样我们就摆脱了红线的控制

那么我们就转化为了从左下角走到翻折后多边形所在角在位置

得到$C_{(n+1)+(n-1)}^{n-1}$即$C_{2*n}^{n-1}$

相减即可

那么如果$n!=m$类似$C_{n+m}^{m}-C_{n+m}^{m-1}$,自己画画即可

代码

我不想放了

乌鸦喝水

题解

$55分算法$

先预处理出来能喝多少次

$n*m$ 复杂度,

代码

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define A 1010101
ll cishu,maxn,n,m,all=0;
ll a[A],he[A],xiajiang[A];
int main(){scanf("%lld%lld%lld",&n,&m,&maxn);for(ll i=1;i<=n;i++){scanf("%lld",&a[i]);}for(ll i=1;i<=n;i++){scanf("%lld",&xiajiang[i]);he[i]=(maxn-a[i])/xiajiang[i];}for(ll i=1;i<=m;i++){all=1;for(ll j=1;j<=n;j++){if(he[j]>=cishu){cishu++;all=0;}}if(all) break;}printf("%lld\n",cishu);
}

View Code

$95分算法$

我们重复枚举了很多无用的状态,当前已经喝不到我们不用再考虑,于是拿链表优化一下

$100分算法$

这种题肯定有性质,这么大的范围一定有性质.

性质: 水少的喝了$k$次那么水多的一定至少也喝了$k$次

我们考虑排序,然而排序后打乱了顺序怎么办,拿一个树状数组维护一下排序前的

我们可以快速算出在当前水壶喝了多少水

思考已知之前喝了$ans$次当前还剩$w$个水壶没喝完,这个水壶能喝$cnt$次

那么它能喝$\frac{cnt-ans}{w}$轮

考虑喝完这么多轮会有剩余,这时用树状数组找sum就完了

代码

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define A 1111111
ll c[A],xiajiang[A],he[A],a[A];
ll n,m,maxn,ans=0;
struct toot{ll pos,cnt;friend bool operator < (const toot &a,const toot &b){return ((a.cnt==b.cnt)?(a.pos<b.pos):(a.cnt<b.cnt));}
}que[A];
void add(ll l,ll a){for(ll i=l;i<=n;i+=(i&-i))c[i]+=a;
}
ll sum(ll l){ll sum=0;for(ll i=l;i>=1;i-=(i&-i))sum+=c[i];return sum;
}
int main(){scanf("%lld%lld%lld",&n,&m,&maxn);for(ll i=1;i<=n;i++){scanf("%lld",&a[i]);}for(ll i=1;i<=n;i++){scanf("%lld",&xiajiang[i]);he[i]=(maxn-a[i])/xiajiang[i]+1;que[i].cnt=he[i],que[i].pos=i;add(i,1);}sort(que+1,que+n+1);
//    printf("que[1]=%lld\n",que[1].cnt);for(ll i=1;i<=n;i++){add(que[i].pos,-1);if(que[i].cnt<=0) continue;if(que[i].cnt-ans<=0) continue;ll cnt=(que[i].cnt-ans)/(n-i+1);if(cnt>=m){ans+=m;continue;}if(sum(que[i].pos)<((que[i].cnt-ans)%(n-i+1)))cnt++;ans+=cnt;}printf("%lld\n",ans);
}

View Code

所驼门王的宝藏(骆驼王)

题解

缩点跑一个类似最长链的东西

数组大小比较谜

代码

#include<bits/stdc++.h>
using namespace std;
#define ll int
#define A 2000010
ll n,m,k,tot=0,cnt=0;
ll id(ll x,ll y){return (x-1)*m+y;
}
inline ll read(){ll f=1,x=0;char c=getchar();while(!isdigit(c)){if(c=='-') f=-1;c=getchar();}while(isdigit(c)){x=(x<<1)+(x<<3)+(c-'0');c=getchar();}return f*x;
}
ll head[A],nxt[A<<1],ver[A<<1],a[521000],b[521000],c[521000],sz[A],dfn[A],low[A],sta[A],belong[A],f[A];
ll head_[A],nxt_[A<<1],ver_[A<<1];
map< pair<ll,ll>,ll > mp;
ll top=0,toot=0,scc=0,tot_=0;
bool flag[A],vis[A],ins[A];
vector<ll> hang[A],lie[A];
void add(ll x,ll y){
//    printf("x=%d y=%d\n",x,y);ver[++tot]=y,nxt[tot]=head[x],head[x]=tot;
}
void add2(ll x,ll y){
//    printf("x=%d y=%d\n",x,y);ver_[++tot_]=y;nxt_[tot_]=head_[x];head_[x]=tot_;
}
void tarjan(ll x){dfn[x]=low[x]=++toot;sta[++top]=x;ins[x]=1;for(ll i=head[x];i;i=nxt[i]){ll y=ver[i];if(!dfn[y]){tarjan(y);low[x]=min(low[x],low[y]);}else if(ins[y]) low[x]=min(low[x],dfn[y]);}if(low[x]==dfn[x]){ll y=0;scc++;while(1){y=sta[top--];belong[y]=scc;ins[y]=0;sz[scc]++;if(y==x) break;}}
}
ll dp(ll x,ll pre){if(f[x]) return f[x];f[x]=0;for(ll i=head_[x];i;i=nxt_[i]){ll y=ver_[i];ll nx=dp(y,x);
//        printf("x=%d y=%d nx=%d\n",x,y,nx);f[x]=max(f[x],nx);}f[x]+=sz[x];return f[x];
}
void rebuilt(){for(ll i=1;i<=k;i++){for(ll j=head[i];j;j=nxt[j]){ll y=ver[j];if(belong[i]!=belong[y]){add2(belong[i],belong[y]);}}}
}
int main(){k=read(),n=read(),m=read();for(ll i=1;i<=k;i++){a[i]=read(),b[i]=read(),c[i]=read();mp[make_pair(a[i],b[i])]=i;hang[a[i]].push_back(i);lie[b[i]].push_back(i);}for(ll i=1;i<=k;i++){if(c[i]==1){for(ll j=0;j<hang[a[i]].size();j++){if(i!=hang[a[i]][j])add(i,hang[a[i]][j]);}}if(c[i]==2){for(ll j=0;j<lie[b[i]].size();j++){if(i!=lie[b[i]][j])add(i,lie[b[i]][j]);}}if(c[i]==3){ll _1_=mp[make_pair(a[i]-1,b[i])],_2_=mp[make_pair(a[i]+1,b[i])],_3_=mp[make_pair(a[i],b[i]+1)],_4_=mp[make_pair(a[i],b[i]-1)],_5_=mp[make_pair(a[i]+1,b[i]+1)],_6_=mp[make_pair(a[i]+1,b[i]-1)],_7_=mp[make_pair(a[i]-1,b[i]-1)],_8_=mp[make_pair(a[i]-1,b[i]+1)];if(_1_)    add(i,_1_);if(_2_)    add(i,_2_);if(_3_)    add(i,_3_);if(_4_)    add(i,_4_);if(_5_)    add(i,_5_);if(_6_)    add(i,_6_);if(_7_)    add(i,_7_);if(_8_)    add(i,_8_);}}for(ll i=1;i<=k;i++){if(!dfn[i])    tarjan(i);}
//    for(ll i=1;i<=k;i++){
//        printf("belong=%d\n",belong[id(a[i],b[i])]);
//    }
    rebuilt();for(ll i=1;i<=scc;i++){if(!f[i])dp(i,0);}    for(ll i=1;i<=scc;i++){f[0]=max(f[0],f[i]);}printf("%d\n",f[0]);
}

View Code

转载于:https://www.cnblogs.com/znsbc-13/p/11374102.html

NOIP模拟测试25「字符串·乌鸦喝水·所陀门王的宝藏(陀螺王)」相关推荐

  1. 8.18 NOIP模拟测试25(B) 字符串+乌鸦喝水+所驼门王的宝藏

    T1 字符串 卡特兰数 设1为向(1,1)走,0为向(1,-1)走,限制就是不能超过$y=0$这条线,题意转化为从(0,0)出发,走到(n+m,n-m)且不越过$y=0$,然后就裸的卡特兰数,$ans ...

  2. NOIP模拟测试19「count·dinner·chess」

    反思: 我考得最炸的一次 怎么说呢?简单的两个题0分,稍难(我还不敢说难,肯定又有人喷我)42分 前10分钟看T1,不会,觉得不可做,完全不可做,把它跳了 最后10分钟看T1,发现一个有点用的性质,仍 ...

  3. NOIP模拟测试34「次芝麻·呵呵呵·长寿花」

    次芝麻 题解 大力打表,发现快速幂, 例如初始$5$ $6$,那么第一次就是$5*2\%11=10$,$6*2\%11=1$. 代码 #include<bits/stdc++.h> usi ...

  4. NOIP模拟测试30「return·one·magic」

    magic 题解 首先原式指数肯定会爆$long$ $long$ 首先根据欧拉定理我们可以将原式换成$N^{\sum\limits_{i=1}^{i<=N} [gcd(i,N)==1] C_{G ...

  5. NOIP模拟测试21「折纸·不等式」

    折纸 题解 考试时无限接近正解,然而最终也只是接近而已了 考虑模拟会爆炸,拿手折纸条试一试,很简单 考你动手能力 代码 #include<bits/stdc++.h> using name ...

  6. NOIP模拟测试18「引子·可爱宝贝精灵·相互再归的鹅妈妈」

    待补 引子 题解 大模拟,注意细节 代码1 #include<bits/stdc++.h> using namespace std; int n,m;char a[1005][1005]; ...

  7. NOIP模拟测试10「大佬·辣鸡·模板」

    大佬 显然假期望 我奇思妙想出了一个式子$f[i]=f[i-1]+\sum\limits_{j=1}^{j<=m} C_{k \times j}^{k}\times w[j]$ 然后一想不对得容 ...

  8. NOIP模拟测试25

    这次考试后面心态爆炸了...发现刚了2h的T2是假的之后就扔掉了,草率地打了个骗分 T1只会搜索和m=0 最先做的T3,主要是发现部分分很多,当时第一眼看上去有87分(眼瞎了). 后来想了想,感觉一条 ...

  9. NOIP模拟测试38「金·斯诺·赤」

    金 辗转相减见祖宗 高精 #include<bits/stdc++.h> using namespace std; #define A 2000 #define P 1 #define N ...

最新文章

  1. [Ubuntu] 如何在Ubuntu11.04将PHP5.3降级到PHP5.2
  2. oracle怎么关闭约束,Oracle约束enable/disablenovalidate
  3. ios 监听TextField中内容变化
  4. MySQL—修改数据库root用户密码
  5. AsyncTask doinbackground onProgressUpdate onCancelled onPostExecute的基本使用
  6. iPhone 5用户们,苹果又喊你更新了,不然可能会变砖!
  7. scala List
  8. 数据同步Sqoop用法之mysql与Hive导入导出
  9. Linux电源管理系统架构和驱动(1)-Linux电源管理全局架构
  10. 【论文解读】深度学习目标检测 | R-CNN系列里程碑 | 一文弄懂Faster R-CNN
  11. 奔梦向前-web前端开发工具-简称DW软件适合写网页制作代码-2020-04-25
  12. 肥猫学习日记---数据结构与算法(三)-----链表
  13. 解析html,批量下载图片(java实现)
  14. 云聚创新力量,助力多云互联:Tungsten Fabric在联通沃云峰会2019上分享开源SDN
  15. 家装产业的数字化,正在成为越来越多人的新共识
  16. Visual Studio 2017项目进行打包并附加.net框架打包,菜鸟级安装教程
  17. 商业银行管理(ROSE) 思维导图
  18. Excel的照相机功能(转载+亲自实践)
  19. iOS UIButton 图标与标题位置调整
  20. java 反编译软件

热门文章

  1. IntelliJ IDEA快捷键(Shortcut)官方文档地址
  2. Linux 如何安装程序的源代码软件包/源码程序包/源码包?
  3. Xenix — 微软与UNIX的短暂爱恋
  4. 使用JDBC连接数据库(MySQL)的源代码
  5. 客户说发货慢怎么回复_?沐言恋爱学:当女生说“我累了”,怎么回复最合适?...
  6. Spring Cloud Feign 负载均衡
  7. else 策略模式去掉if_如何用卫语句、策略模式、状态模式重构if-else语句
  8. mysql 多表查询 join on_mysql多表查询
  9. android显示绘图动画,Android自定义View绘图实现渐隐动画
  10. java正则表达式判断_Java正则表达式判断