Lucky Transformation

#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
int n,k,cnt;
char s[];
int main(){
freopen("trans.in","r",stdin);freopen("trans.out","w",stdout);
//freopen("Cola.txt","r",stdin);
while(scanf("%d%d",&n,&k)!=EOF){
scanf("%s",s);cnt=;
int rest=;
for(int i=;i<n;i++){
if(s[i]==''&&s[i+]==''){
if(i>&&(i+)%==&&s[i-]==''&&s[i+]==''){
rest=k-cnt;break;
}
else if((i+)%==&&s[i+]==''&&s[i+]==''){
rest=k-cnt;break;
}
else{
if((i+)%==)s[i]='';
else s[i+]='';
cnt++;
if(cnt==k)break;
}
}
}
rest%=;
if(rest==||cnt==k){
printf("%s\n",s);
}
else{
for(int i=;i<n;i++){
if(s[i]==''&&s[i+]==''){
if((i+)%==)s[i]='';
else s[i+]='';
break;
}
}
printf("%s\n",s);
}
}
}

100分 规律

Snake vs Block

#include<iostream>
#include<cstdio>
#define maxn 210
using namespace std;
int n,m,map[maxn][],num,ans,head[maxn],edge[maxn*+][maxn*+];
struct node{
int to,pre,v;
}e[maxn**];
int make_id(int i,int j){return (i-)*+j;}
void Insert(int from,int to,int v){
e[++num].to=to;
e[num].v=v;
e[num].pre=head[from];
head[from]=num;
edge[from][to]=num;
}
void dfs(int x,int y,int sc,int len){
if(x>n){
ans=max(ans,sc);
return;
}
int now=make_id(x,y);
for(int i=head[now];i;i=e[i].pre){
int to=e[i].to;
if(e[i].v==)continue;
int xx=(to-)/+,yy=to%;
if(yy==)yy=;
e[i].v=;
if(map[xx][yy]>=){
int p=map[xx][yy];
map[xx][yy]=;
dfs(xx,yy,sc,len+p);
map[xx][yy]=p;
}
else {
if(len+map[xx][yy]<){ans=max(ans,sc);}
else {
int p=map[xx][yy];
map[xx][yy]=;
dfs(xx,yy,sc-p,len+p);
map[xx][yy]=p;
}
}
e[i].v=;
}
}
int main(){
freopen("snakevsblock.in","r",stdin);freopen("snakevsblock.out","w",stdout);
//freopen("Cola.txt","r",stdin);
scanf("%d",&n);
for(int i=;i<=n;i++)
for(int j=;j<=;j++){
int id=make_id(i,j);
if(j!=)Insert(id,make_id(i,j-),);//向左
if(j!=)Insert(id,make_id(i,j+),);//向右
Insert(id,make_id(i+,j),);//向下
scanf("%d",&map[i][j]);
}
scanf("%d",&m);
int x,y;
for(int i=;i<=m;i++){
scanf("%d%d",&x,&y);
int id1=make_id(x,y),id2=make_id(x,y+);
e[edge[id1][id2]].v=;
e[edge[id2][id1]].v=;
}
dfs(,,,);
printf("%d",ans);
}

30分 建图+dfs

/*
把豆豆和砖块丢在一起dp
f[i][j][k]:到第i行,蛇的长度还剩下j,从k位置出第i行的最大得分
g[j][l][r]:蛇的长度剩下j,从当前行l到r区间内仍为死亡的最大得分
初始化:对于每个i,g[j][k][k]=f[i-1][j-a[i][k]][k]+max(-a[i][k],0) 为初始状态
方程g[j][l][r] = max(g[j-a[i][l]][l+1][r] + max(-a[i][j],0),g[j-a[i][r]][l][r-1]+max(-a[i][k],0));
最后f[i][j][k] = max{g[j][l][r](1≤l≤k ≤r ≤5)}
*/
#include<iostream>
#include<cstdio>
#include<cstring> #define N 207
#define M 10005 using namespace std;
int a[N][],f[N][M][],g[M][][];
bool flag[N][];
int n,m,maxi,ans,val; inline int read()
{
int x=,f=;char c=getchar();
while(c>''||c<''){if(c=='-')f=-;c=getchar();}
while(c>=''&&c<=''){x=x*+c-'';c=getchar();}
return x*f;
} int main()
{
freopen("snakevsblock.in","r",stdin);
freopen("snakevsblock.out","w",stdout);
n=read();int x,y;
for(int i=;i<=n;i++) for(int j=;j<;j++)
a[i][j]=read();
m=read();
for(int i=;i<=m;i++)
{
x=read();y=read();
flag[x][y-]=;
}
memset(f,-0x7f7f7f,sizeof f);
f[][][]=;maxi=n*; for(int i=;i<=n;i++)
{
memset(g,-0x7f7f7f,sizeof g);
for(int j=;j<=maxi;j++)
for(int k=;k<;k++)
if(j-a[i][k]>= && j-a[i][k]<=maxi)
f[i][j][k]=g[j][k][k]=f[i-][j-a[i][k]][k]+max(-a[i][k],); for(int l=;l<=;l++)
for(int j=,k=j+l;k<;j++,k++)
for(int v=;v<=maxi;v++)
{
if(!flag[i][j] && (val=v-a[i][j])>= && val<=maxi) g[v][j][k] = g[val][j + ][k] + max(-a[i][j], );//g[v][j][k]=max(g[v][j][k],g[val][j+1][k]+max(-a[i][j],0));
if(!flag[i][k-]&& (val=v-a[i][k])>= && val<=maxi) g[v][j][k]=max(g[v][j][k],g[val][j][k-]+max(-a[i][k],));
for(int to=j;to<=k;to++) f[i][v][to]=max(f[i][v][to],g[v][j][k]);
}
} for(int i=;i<=n;i++)
for(int j=;j<=maxi;j++)
for(int k=;k<;k++)
ans=max(f[i][j][k],ans); printf("%d\n",ans);
return ;
}

100分 动态规划

Ping

#include<iostream>
#include<cstring>
#include<cstdio>
#define maxn 100010
using namespace std;
int n,m,k,num,head[maxn],fa[maxn],dep[maxn],h[maxn],cnt;
bool vis[maxn],v[maxn];
int c[][<<];
struct node{
int to,pre;
}e[maxn*];
struct Node{
int l,r;
}p[];
void Insert(int from,int to){
e[++num].to=to;
e[num].pre=head[from];
head[from]=num;
}
int count(int x){
int res=;
while(x){
if(x&)res++;
x>>=;
}
return res;
}
void dfs(int now,int father){
fa[now]=father;dep[now]=dep[father]+;
for(int i=head[now];i;i=e[i].pre){
int to=e[i].to;
if(to==father)continue;
dfs(to,now);
}
}
int sta;
bool lca(int a,int b){
if(vis[a]||vis[b])return ;
if(dep[a]<dep[b])swap(a,b);
while(dep[a]>dep[b]){
a=fa[a];
if(vis[a])return ;
}
while(a!=b){
a=fa[a];b=fa[b];
if(vis[a]||vis[b])return ;
}
return ;
}
bool ok(int s){
memset(vis,,sizeof(vis));
int pos=;
while(s){
pos++;
if(s&)vis[h[pos]]=;
s>>=;
}
for(int i=;i<=k;i++){
int a=p[i].l,b=p[i].r;
if(lca(a,b))continue;
else return ;
}
return ;
}
bool check(int x){
for(int i=;i<=c[x][];i++){
int s=c[x][i];
if(ok(s)){
sta=s;
return ;
}
}
return ;
}
int main(){
freopen("ping.in","r",stdin);freopen("ping.out","w",stdout);
//freopen("Cola.txt","r",stdin);
scanf("%d%d",&n,&m);
for(int i=;i<=(<<n)-;i++){
int nu=count(i);
c[nu][++c[nu][]]=i;
}
int x,y;
for(int i=;i<=m;i++){
scanf("%d%d",&x,&y);
Insert(x,y);Insert(y,x);
if(!v[x])h[++cnt]=x,v[x]=;
if(!v[y])h[++cnt]=y,v[y]=;
}
dfs(,);
scanf("%d",&k);
for(int i=;i<=k;i++)
scanf("%d%d",&p[i].l,&p[i].r);
int l=,r=cnt,ans=;
while(l<=r){
int mid=(l+r)>>;
if(check(mid))ans=mid,r=mid-;
else l=mid+;
}
printf("%d\n",ans);
int pos=;
while(sta){
pos++;
if(sta&)printf("%d ",h[pos]);
sta>>=;
}
return ;
}

30分 二分答案

#include <bits/stdc++.h>
using namespace std;
int n, m, P, u, v, to[], nxt[], p[], deep[], q[][];
int son[], fa[], size[], top[], dfsx[], cnt, ans;
int lca[], Q[], lr[][];
int sta[];
bool flag[];
void dfs(int x)
{
size[x] = ;
for (int i = p[x]; i != -; i = nxt[i])
if (to[i] != fa[x])
{
fa[to[i]] = x;
deep[to[i]] = deep[x] + ;
dfs(to[i]);
if (son[x] == - || size[to[i]] > size[son[x]]) son[x] = to[i];
size[x] += size[to[i]];
}
}
void dfs1(int x)
{
dfsx[x] = ++cnt;
if (son[x] != -) top[son[x]] = top[x], dfs1(son[x]);
for (int i = p[x]; i != -; i = nxt[i])
if (to[i] != fa[x] && to[i] != son[x])
top[to[i]] = to[i], dfs1(to[i]);
}
int findlca(int x, int y)
{
while ()
{
if (top[x] == top[y]) return deep[x] > deep[y]? y : x;
if (deep[top[x]] > deep[top[y]]) x = fa[top[x]];
else y = fa[top[y]];
}
}
bool query(int x, int l, int r, int ll, int rr)
{
if (l == ll && r == rr) return flag[x];
int mid = (l + r) >> , L = x << , R = L | ;
if (rr <= mid) return query(L, l, mid, ll, rr);
else if (ll > mid) return query(R, mid + , r, ll, rr);
else return query(L, l, mid, ll, mid) | query(R, mid + , r, mid + , rr);
}
void modify(int x, int l, int r, int to)
{
flag[x] = true;
if (l == r) return;
int mid = (l + r) >> , L = x << , R = L | ;
if (to <= mid) modify(L, l, mid, to);
else modify(R, mid + , r, to);
}
bool Query(int x, int y)
{
while ()
{
if (top[x] == top[y])
{
if (deep[x] < deep[y]) return query(, , cnt, dfsx[x], dfsx[y]);
else return query(, , cnt, dfsx[y], dfsx[x]);
}
if (deep[top[x]] > deep[top[y]])
if (query(, , cnt, dfsx[top[x]], dfsx[x])) return true;
else x = fa[top[x]];
else
{
if (query(, , cnt, dfsx[top[y]], dfsx[y])) return true;
else y = fa[top[y]];
}
}
}
void work(int x)
{
for (int i = p[x]; i != -; i = nxt[i])
if (to[i] != fa[x])
work(to[i]);
for (int i = lr[x][]; i <= lr[x][]; i++)
if (!Query(q[Q[i]][], q[Q[i]][]))
{
modify(, , cnt, dfsx[x]);
sta[++ans] = x;
return;
}
}
bool cmp(int x, int y) {return lca[x] < lca[y];}
int main()
{
freopen("ping.in","r",stdin);
freopen("ping.out","w",stdout);
scanf("%d%d", &n, &m);
for (int i = ; i <= n; i++) p[i] = son[i] = -, top[i] = size[i] = fa[i] = deep[i] = ;
for (int i = ; i <= n * ; i++) flag[i] = false;
for (int i = ; i <= m; i++)
{
scanf("%d%d", &u, &v);
u--, v--;
to[i * - ] = v;
nxt[i * - ] = p[u];
p[u] = i * - ;
to[i * ] = u;
nxt[i * ] = p[v];
p[v] = i * ;
}
deep[] = ;
dfs();
cnt = ;
dfs1();
scanf("%d", &P);
for (int i = ; i <= P; i++)
{
scanf("%d%d", &u, &v);
u--, v--;
q[i][] = u, q[i][] = v;
lca[i] = findlca(u, v);
Q[i] = i;
}
sort(Q + , Q + P + , cmp);
for (int i = ; i <= n; i++) lr[i][] = P + , lr[i][] = ;
for (int i = ; i <= P; i++)
{
lr[lca[Q[i]]][] = min(lr[lca[Q[i]]][], i);
lr[lca[Q[i]]][] = max(lr[lca[Q[i]]][], i);
}
ans = ;
work();
printf("%d\n", ans);
for (int i = ; i <= ans; i++) printf("%d ", sta[i] + );
return ;
}

100分

2017-10-20 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.16 NOIP模拟赛

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

  3. 10.17 NOIP模拟赛

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

  4. 2018.10.16 NOIP模拟赛解题报告

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

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

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

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

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

  7. 【2019.7.20 NOIP模拟赛 T1】A(A)(暴搜)

    打表+暴搜 这道题目,显然是需要打表的,不过打表的方式可以有很多. 我是打了两个表,分别表示每个数字所需的火柴棒根数以及从一个数字到另一个数字,除了需要去除或加入的火柴棒外,至少需要几根火柴棒. 然后 ...

  8. 2016.10.30 NOIP模拟赛 day2 PM 整理

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

  9. 2016.10.30 NOIP模拟赛 day2 AM 整理

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

  10. 2018.10.20 NOIP模拟 蛋糕(线段树+贪心/lis)

    传送门 听说是最长反链衍生出的对偶定理就能秒了. 本蒟蒻直接用线段树模拟维护的. 对于第一维排序. 维护第二维的偏序关系可以借助线段树/树状数组维护逆序对的思想建立权值线段树贪心求解. 代码

随机推荐

  1. 创建第一个Servlet并定制Sevlet模板

    我们已经为eclipse配好了Tomcat服务器,创建了Web工程,现在是时候该创建一个Servlet向世界问好了! 第一步:创建一个Web工程,选中”src“文件夹 -->单击右键,鼠标移到” ...

  2. C++ 值传递、址传递、引用传递

    一.值传递   int func(int p) 值传递会在栈中开辟一块空间 p,使得p和实参的a 同值. 此时你在函数func里面对p进行任何操作都不会对原值a产生任何影响.因为a 和p本就就是两个变 ...

  3. Cot

    题目大意 两种操作 给坐标上一个直角三角形中每个整点权值$+1$ 求坐标上一个直角三角形中每个整点权值之和 题解 一顿分析思考加推导之后,发现并不存在这样的数据结构(大概是有,只是我不知道),于是考虑 ...

  4. [BZOJ1396&2865]识别子串

    bzoj1396 bzoj2865 dbzoj1396 dbzoj2865 题面 XX在进行字符串研究的时候,遇到了一个十分棘手的问题. 在这个问题中,给定一个字符串\(S\),与一个整数\(K\), ...

  5. ACM学习历程—FZU2148 Moon Game(计算几何)

    Moon Game Description Fat brother and Maze are playing a kind of special (hentai) game in the clearl ...

  6. Cannot resolve class or package 'springframework' less... (Ctrl+F1) Inspection info:Spring XML mode

    其实这个问题是由于MySQL 这个jar 包依赖类型默认是runtime ,也就是说只有运行时生效,所以虽然这里报错,但是不影响你代码运行. 解决方案: 将runtime 修改为Compile 即可 ...

  7. 找工作——JVM内存管理

    1. JVM类加载机制 类从被加载到虚拟机内存开始,到卸载出内存为止,它的整个生命周期包括:加载.连接(验证.准备.解析).初始化.使用和卸载阶段. 加载:根据查找路径找到对应的class文件,然后倒 ...

  8. Python selenium 三种等待方法

    1. 强制等待 sleep(xx) 是最简单粗暴的一种办法,不管你浏览器是否加载完了,程序都得等待3秒,3秒一到,继续执行下面的代码,作为调试很有用,不建议总用这种等待方式,严重影响程序执行速度. 代 ...

  9. samba server导出/datasmb/目录;samba client挂载/data/至本地的/mydata目录;本地的mysqld或mariadb服务的数据目录设置为/mydata, 要求服务能正常启动,且可正常 存储数据;

    实验环境:CentOS7 主机(mini2) :172.16.250.247  主机名::localhost 客户端(mini3):172.16.253.99  主机名:pxe99 #主机:配置文件的 ...

  10. js提交数据时需判断是点击事件还是回车键

    使用回车键实质还是点击事件==回车时将焦点聚居在某个标签上. Html代码: <div id="btlogin" class="btlogin">& ...