NOIP模拟赛

  好像最近每天都会有模拟赛了.今天从高二逃考试跑到高一机房,然而高一也要考试,这回好像没有拒绝的理由了。

  今天的模拟赛好像很有技术含量的感觉.

  T1:xgy断句.

  好诡异的题目,首先给出一些词,一个字符串,要求断句:每个句子至少有三个词,词数是总单词数的因数,单词得是字典里的词.求最多能断多少句.

  首先当然是暴力匹配每一段是否是单词,然后$f_i$表示以$i$结尾的前缀中最多能断多少句,枚举断点进行转移,如何判断能否构成句子呢?搜索啊.

  这里一定要注意如果最后一个状态是极小值,那么输出$0$.因为这个挂了$20$分.

  

 # include <cstdio>
# include <iostream>
# include <cstring>
# include <string>
# include <algorithm>
# include <cmath>
# define R register int
# define ll long long using namespace std; const int maxn=;
int n,len[maxn],l;
char dic[maxn][];
char s[];
int dp[],leng,checkf;
int f[][],c[][]; void dfs (int x,int s,int r)
{
if(x==r+)
{
if(s>=&&leng%s==) checkf=;
return ;
}
if(checkf) return;
for (R i=x;i<=r;++i)
if(c[x][i])
dfs(i+,s+,r);
} bool check (int l,int r)
{
if(f[l][r]!=-) return f[l][r];
leng=r-l+;
checkf=false;
dfs(l,,r);
f[l][r]=checkf;
return f[l][r];
} void init()
{
for (R i=;i<=l;++i)
for (R j=;j<=i;++j)
{
int f=false;
for (R k=;k<=n;++k)
{
if(len[k]!=i-j+) continue;
int ff=true;
for (R z=;z<=len[k];++z)
if(s[j+z-]!=dic[k][z]) ff=false;
if(ff) f=true;
if(f) break;
}
if(f) c[j][i]=;
}
} int main()
{
freopen("xgy.in","r",stdin);
freopen("xgy.out","w",stdout); scanf("%d",&n);
memset(f,-,sizeof(f));
for (R i=;i<=n;++i)
{
scanf("%s",dic[i]+);
len[i]=strlen(dic[i]+);
for (R j=;j<=len[i];++j)
if(dic[i][j]>='A'&&dic[i][j]<='Z') dic[i][j]=dic[i][j]-'A'+'a';
}
scanf("%s",s+);
l=strlen(s+);
for (R i=;i<=l;++i)
if(s[i]>='A'&&s[i]<='Z') s[i]=s[i]-'A'+'a';
init();
for (R i=;i<=l;++i)
dp[i]=-;
dp[]=;
for (R i=;i<=l;++i)
for (R j=;j<i;++j)
{
if(dp[j]==-) continue;
if(i-j+>) continue;
if(check(j+,i)) dp[i]=max(dp[i],dp[j]+);
}
printf("%d\n",dp[l]);
fclose(stdin);
fclose(stdout);
return ;
}

xgy断句

  T2:多人背包.

  显然前$k$优的状态不可能由比前$k$个还劣的状态转移过来,那么只保存前$k$优的即可.然而我强行把$KlogK$写成了$K^3$,竟然卡过了.

  

 # include <cstdio>
# include <iostream>
# include <cstring>
# include <string>
# include <algorithm>
# include <cmath>
# define R register int
# define ll long long using namespace std; const int maxn=;
int k,V,n;
int w[maxn],v[maxn];
int dp[][];
int a[maxn]; int main()
{
freopen("bag.in","r",stdin);
freopen("bag.out","w",stdout); scanf("%d%d%d",&k,&V,&n);
for (R i=;i<=n;++i) scanf("%d%d",&w[i],&v[i]);
memset(dp,,sizeof(dp));
dp[][]=;
for (R i=;i<=n;++i)
for (R j=V;j>=w[i];--j)
{
for (R z=;z<=k;++z)
{
int T=dp[z][ j-w[i] ]+v[i];
if(T<) continue;
for (R l=z;l<=k;++l)
if(T>dp[l][j])
{
for (R t=k;t>l;--t)
dp[t][j]=dp[t-][j];
dp[l][j]=T;
break;
}
}
}
int ans=;
for (R i=;i<=k;++i) ans+=dp[i][V];
printf("%d",ans);
fclose(stdin);
fclose(stdout);
return ;
}

多人背包

  T3:冰原探险.

  似乎爆搜加$map$判重可过,离散化比较麻烦,而且把一些山之间的通道给离散没了...得了70.

  

 # include <cstdio>
# include <iostream>
# include <map>
# include <algorithm>
# include <bitset>
# include <queue>
# define R register int using namespace std; const int dx[]={-,,,};
const int dy[]={,-,,};
const int maxn=;
const int knc=;
int n,N,M;
map <int,int> m;
int x[maxn],y[maxn],sx,sy,ex,ey,a[maxn],b[maxn],c[maxn],d[maxn];
bool ic[knc][knc],vis[knc][knc];
struct node
{
int x,y,v;
};
queue <node> q; int bfs ()
{
node a,b;
a.x=sx,a.y=sy,a.v=;
q.push(a);
while(q.size())
{
a=q.front();
q.pop();
int x=a.x,y=a.y;
vis[x][y]=;
if(a.x==ex&&a.y==ey) return a.v;
for (R d=;d<;++d)
{
x=a.x,y=a.y;
while(ic[x][y]==)
{
x+=dx[d],y+=dy[d];
if(x>N||y>M||x<||y<) break;
if(x==ex&&y==ey)
return a.v+;
}
if(x>N||y>M||x<||y<) continue;
if(!ic[x][y]) continue;
x-=dx[d],y-=dy[d];
if(vis[x][y]) continue;
vis[x][y]=;
b.x=x,b.y=y,b.v=a.v+;
q.push(b);
}
}
return ;
} int read ()
{
R x=,f=;
char c=getchar();
while(!isdigit(c)) { if(c=='-') f=-f; c=getchar(); }
while(isdigit(c)) x=(x<<)+(x<<)+(c^),c=getchar();
return x*f;
} int main()
{
freopen("ice.in","r",stdin);
freopen("ice.out","w",stdout); n=read();
sx=read(),sy=read(),ex=read(),ey=read();
x[++x[]]=sx,x[++x[]]=ex;
y[++y[]]=sy,y[++y[]]=ey;
for (R i=;i<=n;++i)
{
a[i]=read(),b[i]=read(),c[i]=read(),d[i]=read();
x[++x[]]=a[i],x[++x[]]=c[i];
y[++y[]]=b[i],y[++y[]]=d[i];
}
sort(x+,x++x[]);
sort(y+,y++y[]);
int cnt=;
for (R i=;i<=x[];++i)
{
if(x[i]!=x[i-]||i==) cnt++;
m[ x[i] ]=cnt;
}
N=cnt;
for (R i=;i<=n;++i)
a[i]=m[ a[i] ],c[i]=m[ c[i] ];
sx=m[sx],ex=m[ex];
cnt=;
m.clear();
for (R i=;i<=y[];++i)
{
if(y[i]!=y[i-]||i==) cnt++;
m[ y[i] ]=cnt;
}
M=cnt;
for (R i=;i<=n;++i)
b[i]=m[ b[i] ],d[i]=m[ d[i] ];
sy=m[sy],ey=m[ey];
for (R i=;i<=n;++i)
for (R j=a[i];j<=c[i];++j)
for (R z=b[i];z<=d[i];++z)
ic[j][z]=; printf("%d",bfs());
fclose(stdin);
fclose(stdout);
return ;
}

冰原探险

---shzr

NOIP模拟赛-2018.11.5的更多相关文章

  1. NOIP模拟赛-2018.11.7

    NOIP模拟赛 如果用命令行编译程序可以发现没加头文件之类的错误. 如果用命令行编译程序可以发现没加头文件之类的错误. 如果用命令行编译程序可以发现没加头文件之类的错误. 编译之前另存一份,听说如果敲 ...

  2. NOIP模拟赛-2018.11.6

    NOIP模拟赛 今天想着反正高一高二都要考试,那么干脆跟着高二考吧,因为高二的比赛更有技术含量(我自己带的键盘放在这里). 今天考了一套英文题?发现阅读理解还是有一些困难的. T1:有$n$个点,$m ...

  3. NOIP模拟赛-2018.10.22

    模拟赛 今天第一节课是历史,当然是不可能上的,一来到机房发现今天高二考试... 老师说以后可能还要给高一考...那还不如现在跟着做好了,毕竟在学长学姐中垫底显得没那么丢人 这套题风格挺奇怪的...为什 ...

  4. 11/1 NOIP 模拟赛

    11.1 NOIP 模拟赛 期望得分:50:实际得分:50: 思路:暴力枚举 + 快速幂 #include <algorithm> #include <cstring> #in ...

  5. 10.17 NOIP模拟赛

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

  6. NOIP模拟赛20161022

    NOIP模拟赛2016-10-22 题目名 东风谷早苗 西行寺幽幽子 琪露诺 上白泽慧音 源文件 robot.cpp/c/pas spring.cpp/c/pas iceroad.cpp/c/pas ...

  7. contesthunter暑假NOIP模拟赛第一场题解

    contesthunter暑假NOIP模拟赛#1题解: 第一题:杯具大派送 水题.枚举A,B的公约数即可. #include <algorithm> #include <cmath& ...

  8. NOIP模拟赛 by hzwer

    2015年10月04日NOIP模拟赛 by hzwer    (这是小奇=> 小奇挖矿2(mining) [题目背景] 小奇飞船的钻头开启了无限耐久+精准采集模式!这次它要将原矿运到泛光之源的矿 ...

  9. 10.16 NOIP模拟赛

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

随机推荐

  1. DataGridView列标题(列标头)不能居中的解决方法

    winform DataGridView列标题(列标头)不能完全居中的解决方法,一般列标题的居中我们都使用 DgvDemo.ColumnHeadersDefaultCellStyle.Alignmen ...

  2. ExtJs 中Viewport的介绍与使用

    ExtJs 中Viewport的介绍与使用 VeiwPort 代表整个浏览器显示区域,该对象渲染到页面的body 区域,并会随着浏览器显示区域的大小自动改变,一个页面中只能有一个ViewPort 实例 ...

  3. [日常] Go语言圣经-并发的非阻塞缓存

    1.go test命令是一个按照约定和组织进行测试的程序2.竞争检查器 go run -race 附带一个运行期对共享变量访问工具的test,出现WARNING: DATA RACE 说明有数据竞争3 ...

  4. Java基础——GUI编程(四)

    继前面的,这篇主要记录菜单和文件对话框的两个小练习,来熟悉一下方法的应用,一些简单的逻辑和Swing的相关简介,以及关于GUI基础的记录. 一.创建一个菜单 import java.awt.FlowL ...

  5. 【Tomcat】Tomcat集群session管理

    网上资料汇总: 关于 tomcat 集群中 session 共享的三种方法 Tomcat7集群共享Session 基于redis进行统一管理

  6. Graveyard(poj3154)

    Graveyard Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 1289   Accepted: 660   Specia ...

  7. linux系统编程:自己动手写一个cp命令

    cp命令的基本用法: cp 源文件 目标文件 如果目标文件不存在 就创建, 如果存在就覆盖 实现一个cp命令其实就是读写文件的操作: 对于源文件: 把内容全部读取到缓存中,用到的函数read 对于目标 ...

  8. HDU1160(KB12-J DP)

    FatMouse's Speed Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  9. 【代码笔记】iOS-屏幕根据键盘自动的变化高度

    一,效果图. 二,代码. ViewController.h #import <UIKit/UIKit.h> @interface ViewController : UIViewContro ...

  10. springboot No Java compiler available for configuration options compilerClassName: [null] and compil

    今天使用eclipse创建springboot整合jsp出现一个问题,在idea中并没有遇到这个问题.最后发现是需要在eclipse中添加一个eclipse依赖,依赖如下: <dependenc ...