Stack

#include<iostream>
#include<cstdio>
#define mod 7
using namespace std;
int f[][],n;
int main(){
freopen("stack.in","r",stdin);freopen("stack.out","w",stdout);
scanf("%d",&n);
for(int i=;i<=n;i++)
for(int j=;j<=i;j++){
if(j)f[i][j]=f[i-][j]+f[i][j-];
else f[i][j]=;
while(f[i][j]>=mod)f[i][j]-=mod;
}
printf("%d",f[n][n]);
return ;
}

100分 卡特兰数求第n项取模

Cube

/*
记录每个点下面有多少元素top[i],他所在并查集的大小,每次移动操作就把移动后在上面的那部分中所有的点的top加上它移动到的病茶几的大小,修改复杂度很高,查询是O(1)的
*/
#include<iostream>
#include<cstdio>
#include<cstring>
#define maxn 30010
using namespace std;
int p,fa[maxn],sz[maxn],top[maxn];
char ch[];
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=;
for(int i=;i<=;i++)fa[i]=i,sz[i]=;
while(p--){
scanf("%s",ch);
int x,y;
if(ch[]=='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=;i<=n;i++){
if(find(i)==f1){
top[i]+=sz[f2];
}
}
fa[f1]=f2;
sz[f2]+=sz[f1];
sz[f1]=;
} }
else{
scanf("%d",&x);
n=max(n,x);
printf("%d\n",top[x]);
}
}
}

70分 暴力并查集

#include<iostream>
#include<cstdio>
#define maxn 30010
using namespace std;
int p,cnt[maxn],sum[maxn],fa[maxn];
char s[];
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]=;
}
int main(){
freopen("cube.in","r",stdin);freopen("cube.out","w",stdout);
for(int i=;i<=;i++)fa[i]=i,sum[i]=;
scanf("%d",&p);
while(p--){
scanf("%s",s);
int x,y;
if(s[]=='M'){
scanf("%d%d",&x,&y);
merge(find(x),find(y));
}
else {
scanf("%d",&x);
printf("%d\n",sum[find(x)]-cnt[x]-);
}
}
}

100分 带权并查集

Zuma

#include<iostream>
#include<cstdio>
#include<cstring>
#include<map>
#include<queue>
using namespace std;
map<string,bool>vis;
string s,snow;
struct node{
string s;
int step;
}cur,nxt;
queue<node>q;
void down(){
string pre=snow;
snow="";
for(int i=;i<pre.length();){
while(pre[i]==''&&i<pre.length())i++;
snow=snow+pre[i];i++;
}
}
void updata(){
string pre=snow;
bool flag=;
for(int i=;i<pre.length();i++){
if(pre[i]==pre[i-]&&pre[i]==pre[i+])flag=,snow[i]=snow[i-]=snow[i+]='';
}
if(flag){
down();
updata();
}
}
int main(){
//freopen("Cola.txt","r",stdin);
freopen("zuma.in","r",stdin);freopen("zuma.out","w",stdout);
cin>>s;
vis[s]=;
cur.s=s;cur.step=;
//cout<<s<<endl;
bool flag=;
int n1=,n0=;
for(int i=;i<s.length();i++){
if(s[i]==s[i-]){
flag=;break;
}
if(s[i]=='')n0++;
if(s[i]=='')n1++;
}
if(flag==){
int ans=;
if(s[]=='')n0++;
if(s[]=='')n1++;
if(n1%==&&n0%==&&n1==n0){
ans=+(n1/)+((n0-)/)+;
printf("%d",ans);
return ;
}
if(n1%==&&n0%==&&n1==n0){
ans=+((n1-)/)+((n0-)/);
printf("%d",ans);
return ;
}
if(n1<n0)swap(n1,n0);
if(n1%==&&n0==n1-){
ans=+((n1-)/)+(n0/);
printf("%d",ans);
return ;
}
if(n1%==&&n0==n1-){
ans=+(n1/)+((n0-)/);
printf("%d",ans);
return ;
}
}
q.push(cur);
while(!q.empty()){
cur=q.front();q.pop();
int len=cur.s.length();
//cout<<cur.s<<endl;
if(len==){printf("%d",cur.step);return ;}
for(int i=;i<=len;i++){//在第i个前面插
snow="";
snow=snow+cur.s.substr(,max(,i));
snow=snow+"";
snow=snow+cur.s.substr(i,len-i);
string now=snow;
updata();
if(!vis[snow]){
vis[snow]=;
nxt.s=snow;nxt.step=cur.step+;
q.push(nxt);
if(nxt.s.length()==&&nxt.s[]!=''&&nxt.s[]!=''){printf("%d",nxt.step);return ;}
}
//cout<<snow<<endl; snow=now;
snow[i]='';
updata();
if(!vis[snow]){
vis[snow]=;
nxt.s=snow;nxt.step=cur.step+;
q.push(nxt);
if(nxt.s.length()==&&nxt.s[]!=''&&nxt.s[]!=''){printf("%d",nxt.step);return ;}
}
//cout<<snow<<endl;
}
}
fclose(stdin);fclose(stdout);
return ;
}

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<iostream>
#include<cstdio>
#include<cstring>
#define maxn 257
using 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[]=;m=;
for(int i=;i<n;i++){
if(s[i]==s[i-]){
col[m]=s[i]-'';
a[m]++;
}
else {
a[++m]=;
col[m]=s[i]-'';
}
}
for(int len=;len<=m;len++){
for(int i=;i<=m;i++){
int j=i+len;
if(j>=&&j<=m){
dp[i][j]=*n;
if(len==)dp[i][j]=-a[i];
else {
for(int k=i;k<j;k++)
dp[i][j]=min(dp[i][k]+dp[k+][j],dp[i][j]);
if((j-i)%==){
if(a[i]+a[j]==){
if(col[i]==col[j])
dp[i][j]=min(dp[i][j],dp[i+][j-]+);
}
else
if(col[i]==col[j])
dp[i][j]=min(dp[i][j],dp[i+][j-]);
if(a[i]+a[j]<)
for(int k=i+;k<j;k+=)
if(a[k]==)dp[i][j]=min(dp[i+][k-]+dp[k+][j-],dp[i][j]);
}
}
}
}
}
printf("%d\n",dp[][m]);
return ;
}

100分 区间dp

2017-10-15 NOIP模拟赛的更多相关文章

  1. 2017 10.25 NOIP模拟赛

    期望得分:100+40+100=240 实际得分:50+40+20=110 T1 start取了min没有用,w(゚Д゚)w    O(≧口≦)O T3 代码3个bug :数组开小了,一个细节没注意, ...

  2. 10.17 NOIP模拟赛

    目录 2018.10.17 NOIP模拟赛 A 咒语curse B 神光light(二分 DP) C 迷宫maze(次短路) 考试代码 B 2018.10.17 NOIP模拟赛 时间:1h15min( ...

  3. 10.16 NOIP模拟赛

    目录 2018.10.16 NOIP模拟赛 A 购物shop B 期望exp(DP 期望 按位计算) C 魔法迷宫maze(状压 暴力) 考试代码 C 2018.10.16 NOIP模拟赛 时间:2h ...

  4. 2018.10.16 NOIP模拟赛解题报告

    心路历程 预计得分:\(100 + 100 + 20 = 220\) 实际得分:\(100 + 100 + 30 = 230\) 辣鸡模拟赛.. T1T2都是一眼题,T3考验卡常数还只有一档暴力分. ...

  5. 2018.10.03 NOIP+ 模拟赛 解题报告

    得分: \(30+5+0=35\)(考得真不咋滴) \(T1\):奥义商店(点此看题面) 以为很简单,对着这题想了一个多小时,最后果断打了个暴力交了... ... 看完题解发现其实也不是很难. 对于\ ...

  6. 2016.10.30 NOIP模拟赛 day2 PM 整理

    满分:300分 直接全部爆零,真的是很坑啊! 10.30的题目+数据:链接:http://pan.baidu.com/s/1jHXLace 密码:i784 T1: 题目中的难点就是每次折叠的点可能应经 ...

  7. 2016.10.30 NOIP模拟赛 day2 AM 整理

    题目+数据:链接:http://pan.baidu.com/s/1gfBg4h1 密码:ho7o 总共得了:130分, 1:100分  2:30分(只会这30分的暴力) 3:0(毫无思路) 虽然不高, ...

  8. 2017.5.27 NOIP模拟赛(hzwer2014-5-16 NOIP模拟赛)

    期望得分:100+100+60+30=290 实际得分:100+20+60+0=180 当务之急:提高一次正确率 Problem 1 双色球(ball.cpp/c/pas) [题目描述] 机房来了新一 ...

  9. 2017.6.11 NOIP模拟赛

    题目链接: http://files.cnblogs.com/files/TheRoadToTheGold/2017-6.11NOIP%E6%A8%A1%E6%8B%9F%E8%B5%9B.zip 期 ...

  10. 2018.10.30 NOIp模拟赛 T1 改造二叉树

    [题目描述] 小Y在学树论时看到了有关二叉树的介绍:在计算机科学中,二叉树是每个结点最多有两个子结点的有序树.通常子结点被称作“左孩子”和“右孩子”.二叉树被用作二叉搜索树和二叉堆.随后他又和他人讨论 ...

随机推荐

  1. ES索引瘦身 压缩——_source _all 均disable filed store为no,引入第三方DB存储原始数据,去掉pos倒排和doc_values,强制定期merge segments,将所有fileds合并为一个field big string

    原始数据:835MB ES 设置了_source _all disabled 且设置了仅仅存docs倒排Wed Feb 22 11:58:27 CST 2017Before size:1 /home/ ...

  2. [深入学习C#]C#实现多线程的方法:线程(Thread类)和线程池(ThreadPool)

    简介 使用线程的主要原因:应用程序中一些操作需要消耗一定的时间,比如对文件.数据库.网络的访问等等,而我们不希望用户一直等待到操作结束,而是在此同时可以进行一些其他的操作.  这就可以使用线程来实现. ...

  3. hbase_学习_01_HBase环境搭建(单机)

    一.前言 本文承接上一篇:hadoop_学习_02_Hadoop环境搭建(单机)  ,主要是搭建HBase的单机环境 二.环境准备 1.说明 hbase 的下载来源有: 官方版本:http://arc ...

  4. spring MVC basic

    1.MVC&&Spring MVC .mvc的就核心思想是业务数据抽取同业务数据呈现相分离 .View,视图层,为用户提供UI,重点关注数据的呈现 .model,业务数据的信息表示,关 ...

  5. POJ-1741(树分治)

    树的点分治 给出详细的讲解!!点这里打开论文-分治算法在树的路径问题中的应用 本题目是他讲的第一个例题: 我的理解:每次都找树的重心,计算以重心为根的子树之间所贡献的答案.不断这样下去:如果这棵树是一 ...

  6. BEC listen and translation exercise 42

    These were built for the workers towards the end of the eighteenth century, and they are still furni ...

  7. 菜单栏(QMenuBar)与菜单(QMenu)

    之前一直搞不清楚什么是菜单栏,后来看了文档才知道是怎么一回事,下面是我本人对菜单栏和菜单的理解,可能存在理解错误. 一.菜单栏 菜单栏是容纳菜单的一个容器,里面可以存放菜单列表,用菜单栏的目的就是为了 ...

  8. 【leetcode刷题笔记】String to Integer (atoi)

    Implement atoi to convert a string to an integer. Hint: Carefully consider all possible input cases. ...

  9. Gym 101142 I.Integral Polygons(计算几何)

    题意:给定一个凸包,现在让你连接凸包上两点,把凸包变为两个多边形,满足两个多边形的面积都是整数. 思路:我们知道整点的三角形面积S=叉积/2,则S要么是整数,要么是整数+0.5.那么多边形有多个三角形 ...

  10. Hihocoder1662 : 查找三阶幻方([Offer收割]编程练习赛40)(暴力)

    时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 给定一个N x M的矩阵,请你数一数其中有多少个3 x 3的子矩阵可以构成三阶幻方? 如果3 x 3的矩阵中每一行.每一列 ...