博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
2017-10-15 NOIP模拟赛
阅读量:5052 次
发布时间:2019-06-12

本文共 3695 字,大约阅读时间需要 12 分钟。

 Stack

 

 

#include
#include
#define mod 7using namespace std;int f[1010][1010],n;int main(){ freopen("stack.in","r",stdin);freopen("stack.out","w",stdout); scanf("%d",&n); for(int i=0;i<=n;i++) for(int j=0;j<=i;j++){ if(j)f[i][j]=f[i-1][j]+f[i][j-1]; else f[i][j]=1; while(f[i][j]>=mod)f[i][j]-=mod; } printf("%d",f[n][n]); return 0;}
100分 卡特兰数求第n项取模

 

Cube

 

/*    记录每个点下面有多少元素top[i],他所在并查集的大小,每次移动操作就把移动后在上面的那部分中所有的点的top加上它移动到的病茶几的大小,修改复杂度很高,查询是O(1)的*/#include
#include
#include
#define maxn 30010using namespace std;int p,fa[maxn],sz[maxn],top[maxn];char ch[5];int find(int x){ if(fa[x]==x)return fa[x]; return fa[x]=find(fa[x]);}int main(){ //freopen("Cola.txt","r",stdin); freopen("cube.in","r",stdin);freopen("cube.out","w",stdout); scanf("%d",&p); int n=0; for(int i=1;i<=30000;i++)fa[i]=i,sz[i]=1; while(p--){ scanf("%s",ch); int x,y; if(ch[0]=='M'){ scanf("%d%d",&x,&y); n=max(n,max(x,y)); int f1=find(x),f2=find(y); if(f1!=f2){ for(int i=1;i<=n;i++){ if(find(i)==f1){ top[i]+=sz[f2]; } } fa[f1]=f2; sz[f2]+=sz[f1]; sz[f1]=0; } } else{ scanf("%d",&x); n=max(n,x); printf("%d\n",top[x]); } }}
70分 暴力并查集
#include
#include
#define maxn 30010using namespace std;int p,cnt[maxn],sum[maxn],fa[maxn];char s[4];int find(int x){ if(x==fa[x])return fa[x]; int f=fa[x]; fa[x]=find(fa[x]); cnt[x]+=cnt[f]; return fa[x];}void merge(int x,int y){ fa[y]=x; cnt[y]+=sum[x]; sum[x]+=sum[y]; sum[y]=0;}int main(){ freopen("cube.in","r",stdin);freopen("cube.out","w",stdout); for(int i=1;i<=30000;i++)fa[i]=i,sum[i]=1; scanf("%d",&p); while(p--){ scanf("%s",s); int x,y; if(s[0]=='M'){ scanf("%d%d",&x,&y); merge(find(x),find(y)); } else { scanf("%d",&x); printf("%d\n",sum[find(x)]-cnt[x]-1); } }}
100分 带权并查集

 

 

Zuma

 

 

#include
#include
#include
#include
#include
using namespace std;map
vis;string s,snow;struct node{ string s; int step;}cur,nxt;queue
q;void down(){ string pre=snow; snow=""; for(int i=0;i
>s; vis[s]=1; cur.s=s;cur.step=0; //cout<
<
65分 宽搜
/*    区间dp,情况有些多需要讨论    首先连续相同的颜色为了方便要合并,记录每个块的颜色,就可以dp了    dp[l][r]表示合并这段区间的最小步数,分几种情况    这段区间是奇数(为了避免区间长度为2的情况)    1. color[l]==color[r] && tot[l]+tot[r]==2  --> dp[l][r] 可从 dp[l+1][r-1]+1 转移过来。    2. color[l]==color[r] && tot[l]+tot[r]>2   --> dp[l][r] 可从 dp[l+1][r-1] 转移过来。    3. color[l]==color[k]==color[r](k∈(l,r) && [l,k],[k,r] 为奇数)  -->可从dp[l+1][k-1]+dp[k+1][r-1]转移过来。    这段区间是偶数    普通的转移 dp[l][r] =min(dp[l][r] , dp[l][k]+dp[k+1][r]);*/#include
#include
#include
#define maxn 257using namespace std;int dp[maxn][maxn],col[maxn],a[maxn];char s[maxn];int n,m,ans;int main(){ freopen("zuma.in","r",stdin);freopen("zuma.out","w",stdout); scanf("%s",s);n=strlen(s); a[1]=1;m=1; for(int i=1;i
=1&&j<=m){ dp[i][j]=2*n; if(len==0)dp[i][j]=3-a[i]; else { for(int k=i;k
100分 区间dp

 

转载于:https://www.cnblogs.com/thmyl/p/7670269.html

你可能感兴趣的文章
Oracle 插入Date数据
查看>>
word文档操作
查看>>
UIpageControl
查看>>
js判断是否为IE浏览器,是返回true,否返回false
查看>>
Linux性能分析 vmstat基本语法
查看>>
SpringMVC框架学习笔记(2)——使用注解开发SpringMVC
查看>>
深入理解递归函数的调用过程
查看>>
《在C#中实现Socket端口复用》 以及《 UDP 一个封锁操作被对 WSACancelBlockingCall 的调用中断。》问题...
查看>>
PDF格式的“在线阅读”和“下载”
查看>>
无耻之徒(美版)第七季/全集Shameless US迅雷下载
查看>>
svn cleanup failed–previous operation has not finished; run cleanup if it was interrupted
查看>>
Webpack4 学习笔记四 暴露全局变量、externals
查看>>
CF1005F Berland and the Shortest Paths
查看>>
vscode点击ctrl键报错Request textDocument/definition failed.
查看>>
图王:刺客——运筹帷幄善于在变化中找到方向的站长
查看>>
Safari无痕浏览影响localStorage
查看>>
POJ 3368 Frequent values (RMQ,4级)
查看>>
java 练习题3
查看>>
对象生命周期的简单理解
查看>>
c# 日志记录 行号
查看>>