更好的阅读体验

我的博客观看

T1-Buying A House

给你一个长度为n的序列a,给你目标房子m,最多花的钱k

如果a[i]为0,这座房子无法购买,否则可以购买,求能买的距离目标房子最近的房子,输出最小距离

两座房子之间距离为10

解法

显然贪心的从目标房子开始左右扫就可以了

ac代码

#include<bits/stdc++.h>
using namespace std;
int n,m,lim,ans,a[110];
int main()
{
scanf("%d%d%d",&n,&m,&lim);
for(int i=1;i<=n;i++)scanf("%d",&a[i]);
for(int i=1;;i++)
{
if(m-i>=1)if(a[m-i]&&a[m-i]<=lim){ans=i;break;}
if(m+i<=n)if(a[m+i]&&a[m+i]<=lim){ans=i;break;}
}
printf("%d\n",ans*10);
return 0;
}

T2-Find The Bone

一个长度为n的线段,线段上有m个坑,k次操作,骨头一开始在1,每次操作给定x,y,交换x,y,如果骨头掉到坑里,就会一直在那里,求最后骨头所在位置

解法

模拟一遍就好了QAQ

ac代码

#include<bits/stdc++.h>
using namespace std;
int n,m,k,x,y,ans=1,a[1000010];
int main()
{
scanf("%d%d%d",&n,&m,&k);
for(int i=1;i<=m;i++)scanf("%d",&x),a[x]=1;
for(int i=1;i<=k;i++)
{
scanf("%d%d",&x,&y);
if(x==ans&&!a[x])ans=y;
else if(y==ans&&!a[y])ans=x;
}
printf("%d\n",ans);
return 0;
}

T3-Bank Hacking

给定一棵带点权树,选出一个最佳的根节点,使得根节点的点权不变,它的儿子点权加1,其余点点权加2,并使最大点权最小,输出这个最小的最大点权

解法

暴力的对每一个点扫它所有的儿子,然后check,设ans为原来的最大值,答案只可能是ans,ans+1,ans+2,复杂度是n+m

ac代码

#include<bits/stdc++.h>
using namespace std;
struct node{int to,next;}e[600010];
int n,cnt=0,res,ans=-0x3f3f3f3f,flg,x,y,a[300010],head[300010];
map<int,int>mp;
void add(){e[++cnt]={y,head[x]},head[x]=cnt,e[++cnt]={x,head[y]},head[y]=cnt;}
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)scanf("%d",&a[i]),mp[a[i]]++,ans=max(ans,a[i]);
res=ans+2;
for(int i=1;i<n;i++)scanf("%d%d",&x,&y),add();
for(int i=1;i<=n;i++)
{
flg=0;
for(int j=head[i];j;j=e[j].next){mp[a[e[j].to]]--;if(a[e[j].to]==ans)flg=1;}
if(!mp[ans])res=ans+1;
if(ans==a[i]&&mp[ans]==1)
{
if(mp[ans-1])res=ans+1;
else if(flg)res=ans+1;
else{res=ans;break;}
}
for(int j=head[i];j;j=e[j].next)mp[a[e[j].to]]++;
}
printf("%d\n",res);
return 0;
}

T4-Police Stations

给定一棵树,树上有一些点是警察局,要求所有点到最近的警察局的距离不大于d,求最多能删几条边

解法

建一个超级源连着所有警察局,或者一开始就把所有警察局压入队列,跑bfs

如果这条边过去的点被访问过,那这条边就可以删除

bfs的退出条件不是点有没有被搜过,而是边有没有被搜索和距离是否超过d

ac代码

#include<bits/stdc++.h>
using namespace std;
struct node{int to,next,v;}e[600010];
struct Node{int num,d;};
int n,k,d,cnt=1,ans=0,x,y,head[300010],vis[300010],flg[300010],res[300010];
queue<Node>q;
void add(){e[++cnt]={y,head[x],0},head[x]=cnt,e[++cnt]={x,head[y],0},head[y]=cnt;}
void bfs()
{
while(!q.empty())
{
Node u=q.front();
q.pop();
flg[u.num]=0;
if(u.d>d)continue;
for(int i=head[u.num];i;i=e[i].next)
{
if(e[i].v)continue;
e[i].v=e[i^1].v=1;
if(vis[e[i].to])res[++ans]=i/2;
if(!flg[e[i].to])q.push({e[i].to,u.d+1}),flg[e[i].to]=vis[e[i].to]=1;
}
}
}
int main()
{
scanf("%d%d%d",&n,&k,&d);
for(int i=1;i<=k;i++)scanf("%d",&x),q.push({x,0}),vis[x]=1;
for(int i=1;i<n;i++)scanf("%d%d",&x,&y),add();
bfs(),printf("%d\n",ans);
for(int i=1;i<=ans;i++)printf("%d ",res[i]);
return 0;
}

T5-Exam Cheating

muronglin是个学渣,考试的时候,她一道题也不会做

她的左右桌分别是学霸chhokmah和学霸lukelin,虽然学霸并不是题题都会做,但他们做了的题一定都对

现在muronglin想要作弊,但是为了不被监考员抓住,她最多偷看p次,一次能看连续的k道题

给定n和la和lb,分别为题目总数,chhokmah做出题目数和lukelin做出题目数,再给出两位学霸做出题目序列,问muronglin最多能偷看到几道题的答案

解法

可以看出是个dp,设dp[i][j][x][y]表示前i个问题,用j次机会,chhokmah还能看x道题,lukelin还能看y道题的最优值

转移时分情况讨论,如果都没有机会,分4种:都不偷看,偷看任意1位,偷看2位

如果任意1位没有机会,分3种:只偷看1位,偷看2位,重新开始偷看2位

如果都有机会,就顺着模拟

ac代码

#include<bits/stdc++.h>
#define get(x,y) x=max(x,y)
#define FOR(i,a,b) for(int i=a;i<=b;i++)
using namespace std;
int n,p,k,la,lb,ans=0,x,y=1,a[1010],b[1010],dp[2][1010][60][60];
int main()
{
memset(dp,-0x3f,sizeof(dp)),dp[0][0][0][0]=0,scanf("%d%d%d",&n,&p,&k);
scanf("%d",&la);FOR(i,1,la)scanf("%d",&x),a[x]=1;
scanf("%d",&lb);FOR(i,1,lb)scanf("%d",&x),b[x]=1;
if(p*k>=2*n){FOR(i,1,n)ans+=a[i]|b[i];printf("%d\n",ans);return 0;}
FOR(i,1,n)
{
x=y,y^=1,memset(dp[x],-0x3f,sizeof(dp[x]));
FOR(j,0,p)FOR(ii,0,k)FOR(jj,0,k)if(!ii&&!jj)
{
get(dp[x][j][0][0],dp[y][j][0][0]);
get(dp[x][j+1][k-1][0],dp[y][j][0][0]+a[i]);
get(dp[x][j+1][0][k-1],dp[y][j][0][0]+b[i]);
get(dp[x][j+2][k-1][k-1],dp[y][j][0][0]+(a[i]|b[i]));
}
else if(!ii)
{
get(dp[x][j][0][jj-1],dp[y][j][0][jj]+b[i]);
get(dp[x][j+1][k-1][jj-1],dp[y][j][0][jj]+(a[i]|b[i]));
get(dp[x][j+2][k-1][k-1],dp[y][j][0][jj]+(a[i]|b[i]));
}
else if(!jj)
{
get(dp[x][j][ii-1][0],dp[y][j][ii][0]+a[i]);
get(dp[x][j+1][ii-1][k-1],dp[y][j][ii][0]+(a[i]|b[i]));
get(dp[x][j+2][k-1][k-1],dp[y][j][ii][0]+(a[i]|b[i]));
}
else get(dp[x][j][ii-1][jj-1],dp[y][j][ii][jj]+(a[i]|b[i]));
}
FOR(l,0,p)FOR(i,0,k)FOR(j,0,k)get(ans,dp[x][l][i][j]);printf("%d\n",ans);
return 0;
}

hgoi#20190516的更多相关文章

  1. HGOI 20181028 题解

    HGOI 20181028(复赛备考) /* 真是暴力的一天,最后一题MLE?由于数组开得太大了!!! 270滚粗 考场上好像智商高了很多?!(假的) */ sol:暴力求解,然后没有数据范围吐槽一下 ...

  2. HGOI NOIP模拟4 题解

    NOIP国庆模拟赛Day5 题解 T1 马里奥 题目描述 马里奥将要参加 NOIP 了,他现在在一片大陆上,这个大陆上有着许多浮空岛,并且其中一座浮空岛上有一个传送门,马里奥想要到达传送门从而前往 N ...

  3. HGOI 20191106

    HGOI 20191106 t1 旅行家(traveller) 2s,256MB [题目背景] 小X热爱旅行,他梦想有一天可以环游全世界-- [题目描述] 现在小X拥有n种一次性空间转移装置,每种装置 ...

  4. 「HGOI#2019.4.19省选模拟赛」赛后总结

    t1-Painting 这道题目比较简单,但是我比较弱就只是写了一个链表合并和区间DP. 别人的贪心吊打我的DP,嘤嘤嘤. #include <bits/stdc++.h> #define ...

  5. HGOI 20190407 Typing Competition Round #1 出题记

    /* ljc20020730出的HGOI20190407的模拟赛. 考试结果比预期难的不少,可能是由于本来计划5h的比赛打了4h吧. 就当普及组模拟赛好了... 难度大概4紫吧(弱省省选难度) 出境 ...

  6. HGOI 20190310 题解

    /* 又是又双叒叕WA的一天... 我太弱鸡了... 今天上午打了4道CF */ Problem 1 meaning 给出q组询问,求下列函数的值$ f(a) = \max\limits_{0 < ...

  7. [hgoi#2019/3/21]NOIP&NOI赛后总结

    前言 今天做的是是2010年提高组和NOI的题目,做过几道原题,但是还是爆炸了,我真的太弱了. t1-乌龟棋 https://www.luogu.org/problemnew/show/P1541 这 ...

  8. HGOI 20190303 题解

    /* 记一串数字真难. 5435 今天比赛又是hjcAK的一天. 今天开题顺序是312,在搞T1之前搞了T3 昨天某谷月赛真是毒瘤. 但是讲评的同学不错,起码T4看懂了... 构造最优状态然后DP的思 ...

  9. HGOI 20180224 题解

    /* The Most Important Things: ljc chat with fyh on QQTa说期末考Ta数学74分感觉不好但是我觉得fyh是地表最强的鸭~~(of course en ...

随机推荐

  1. WPF公章制作之2

    原文:WPF公章制作之2 早前,我曾写过一篇:"在WPF中制作正圆形公章"(http://blog.csdn.net/johnsuna/archive/2007/10/12/182 ...

  2. android4.4系统解决“ERRORcouldn&#39;t find native method”方法

    android4.4系统解决"ERRORcouldn't find native method"方法 今天笔者在移植一个tv模块从android4.2到android4.4系统的设 ...

  3. Linux性能测试 dmesg命令

    dmesg 命令主要用来显示内核信息.使用 dmesg 可以有效诊断机器硬件故障或者添加硬件出现的问题.  另外,使用 dmesg 可以确定您的服务器安装了那些硬件.每次系统重启,系统都会检查所有硬件 ...

  4. AutoEncoder一些实验结果,并考虑

    看之前Autoencoder什么时候,我做了一些练习这里:http://ufldl.stanford.edu/wiki/index.php/Exercise:Sparse_Autoencoder .其 ...

  5. matlab 三维图像的绘制

    1. 基本绘图函数 plot3() scatter3() 2. 修饰与点缀 但仅使用默认的配置,调用这些绘图函数,不会很丑,但也漂亮不到哪里去. view(az, el),调整视野和视角:

  6. matlab 求解 Ax=B 时所用算法

    x = A\B; x = mldivide(A, B); matlab 在这里的求解与严格的数学意义是不同的, 如果 A 接近奇异,matlab 仍会给出合理的结果,但也会提示警告信息: 如果 A 为 ...

  7. 基于Linux C的socketEthereal程序和Package分析 (一个)

     执行测试平台:CentOS 6.5发行版,内核版本号3.11 1. Linux抓包源程序 在OSI七层模型中.网卡工作在物理层和数据链路层的MAC子层. 进行网络通信时.源主机通过socket( ...

  8. U3D游戏开发商思考

    代码驱动带来的技术题 游戏碎片化.U3D 引擎有个非常有力的特色,就是实时编译执行.这意味着不管在不论什么时候,仅仅要按下执行图标,当前的场景就会进入可执行状态. 这导致了游戏在开发的过程中常常陷入一 ...

  9. Golang的演化历程

    本文来自Google的Golang语言设计者之一Rob Pike大神在GopherCon2014大会上的开幕主题演讲资料“Hello, Gophers!”.Rob大神在这次分 享中用了两个生动的例子讲 ...

  10. 理解 node.js 的事件循环

    node.js 的第一个基本观点是,I/O 操作是昂贵的: 目前的编程技术最大的浪费来自等待 I/O 操作的完成.有几种方法可以解决这些对性能的影响(来自Sam Rushing): 同步:依次处理单个 ...