模拟赛越打越少,有点伤感,但还是记录下这最后几场。

梦想总是遥不可及,是不是应该放弃。

T1:上海红茶馆 ChineseTea.cpp
问题描述:
你现在正在经营一家红茶馆, 而且这里有各种各样的红茶, 你现在把这些红茶分成了N个等级, 每个等级的茶有一个品质Q。
现在每一个来的客人都会要求一个品质为S的茶, 你需要迅速的回答他是否有。

输入格式:
第一行两个数N,M。
下面一行N个数, 分别表示每个等级的茶的品质Q。
下面一行M个数, 分别表示询问的品质S。

输出格式:
输出一行M个字符, 表示回答是否。 Y表示有, N表示没有。

样例输入:
5 5
1 3 4 6 8
1 2 3 4 5
样例输出:
YNYYN

数据规模:
30%:N,M<5000
100%:N,M<200000
据说c++map一下就解决了~~但由于ywd垃圾的评测机被卡成60~~ 没有map的c选手只好先快排再写个二分查找。附上代码:
`

#include<stdio.h>
#include<stdlib.h>
FILE*fin,*fout;
int a[200050]={0};
int n,m,flag=0;
int binsearch(int left,int right,int goal)
{int mid;mid=(left+right)/2;if(a[mid]==goal){flag=1;return 0;}if(flag==1||left>=right)  return 0;if(a[mid]>goal)  {binsearch(left,mid-1,goal);}else if(a[mid]<goal)  {binsearch(mid+1,right,goal);}return 0;
}
int quicksort(int left,int right)
{int i,j,mid,t;i=left;j=right;mid=a[(i+j)/2];while(i<=j){while(a[i]<mid)  i++;while(a[j]>mid)  j--;if(i<=j){t=a[i];a[i]=a[j];a[j]=t;i++;j--;}}if(i<right)  quicksort(i,right);if(j>left)   quicksort(left,j);return 0;
}
int main()
{int x,i;fin=fopen("chinesetea.in","r");fout=fopen("chinesetea.out","w");fscanf(fin,"%d%d",&n,&m);for(i=1;i<=n;i++)fscanf(fin,"%d",&a[i]);quicksort(1,n);for(i=1;i<=m;i++){flag=0;fscanf(fin,"%d",&x);binsearch(1,n,x);if(flag==1)fprintf(fout,"Y");else fprintf(fout,"N");}fclose(fin);fclose(fout);return 0;
}

T2:

软件安装  install.cpp

问题描述:

现在我们的手头有N个软件,对于一个软件i,它要占用Wi的磁盘空间,它的价值为Vi。我们希望从中选择一些软件安装到一台磁盘容量为M计算机上,使得这些软件的价值尽可能大(即Vi的和最大)。
    但是现在有个问题:软件之间存在依赖关系,即软件i只有在安装了软件j(包括软件j的直接或间接依赖)的情况下才能正确工作(软件i依赖软件j)。幸运的是,一个软件最多依赖另外一个软件。如果一个软件不能正常工作,那么它能够发挥的作用为0。
    我们现在知道了软件之间的依赖关系:软件i依赖软件Di。现在请你设计出一种方案,安装价值尽量大的软件。一个软件只能被安装一次,如果一个软件没有依赖则Di=0,这时只要这个软件安装了,它就能正常工作。

Input

第1行:N, M  (0<=N<=100, 0<=M<=500)
  第2行:W1, W2, ... Wi, ..., Wn (0<=Wi<=M )
  第3行:V1, V2, ..., Vi, ..., Vn  (0<=Vi<=1000 )
  第4行:D1, D2, ..., Di, ..., Dn (0<=Di<=N, Di≠i )

Output

一个整数,代表最大价值。

Sample Input

3 10
5 5 6
2 3 4
0 1 1

Sample Output

5

这个题难度对我这种蒟蒻实在太高了,我一开始一看觉得是个背包,想把有依赖条件的物品创造出一个新的物品,推了半天没推出来,然后从网络流的角度想,构一个终极源点和终极汇点在里面跑一个总体积小于m的最大流由于网络流写炸而且这玩意最后听说可能和费用流这种我不会的东西有关。最后强打暴力O(2^n)加一通玄学剪枝40分。正解应是tarjan缩点(防止循环依赖)然后再跑树形dp。附上惨不忍睹的暴力代码:

#include<stdio.h>
#include<stdlib.h>
FILE*fin,*fout;
int v[100001]={0},w[100001]={0},vis[100001]={0},fa[100001]={0},used[100001]={0};
int n,m,ans=-1,vsum=0;
int judge()
{int i,sum=0;for(i=1;i<=n;i++)if(fa[i]==0&&vis[i]==1){sum+=w[i];}else if(vis[i]==1){if(used[fa[i]]==1){used[i]=1;sum+=w[i];}}if(sum>ans)  ans=sum;return 0;
}
int dfs(int i)
{if(vsum>m)return 0;if(i==n+1){judge();return 0;}vis[i]=1;if(fa[i]==0||used[fa[i]]==1)used[i]=1;vsum+=v[i];if(used[i]==1)dfs(i+1);vsum-=v[i];used[i]=0;vis[i]=0;dfs(i+1);return 0;
}
int main()
{int i,j;fin=fopen("install.in","r");fout=fopen("install.out","w");fscanf(fin,"%d%d",&n,&m);for(i=1;i<=n;i++)fscanf(fin,"%d",&v[i]);for(i=1;i<=n;i++)fscanf(fin,"%d",&w[i]);for(i=1;i<=n;i++)fscanf(fin,"%d",&fa[i]);dfs(1);fprintf(fout,"%d",ans);fclose(fin);fclose(fout);return 0;
}

T3:乘电梯

一道区间dp,我也懒得看了,直接敲暴力,50分。今年noip我肯定会因为dp不擅长吃很多亏。

#include<stdio.h>
#include<stdlib.h>
FILE*fin,*fout;
double time[100001]={0};
int s[100001]={0},t[100001]={0},vis[100001]={0};
double ans=214748361,sum=0;
int n,m;
double cal(double a,double b)
{return (a*(a+1)+b*(b+1))/(2*(a+b+1));
}
int dfs(int fnum)
{int i;if(sum+m-1>ans)  return 0;if(time[fnum]<sum&&time[fnum]!=0)return 0;if(time[fnum]==0)time[fnum]=sum;if(fnum==1){if(sum+m-1<ans)ans=sum+m-1;return 0;}for(i=1;i<=n;i++){if(fnum>t[i])  break;if(fnum<=t[i]&&fnum>=s[i]&&vis[i]==0){sum+=cal(t[i]-fnum,fnum-s[i]);vis[i]=1;dfs(s[i]);vis[i]=0;sum-=cal(t[i]-fnum,fnum-s[i]);}}return 0;
}
int quicksort(int left,int right)
{int i,j,mid,t1;i=left;j=right;mid=t[(i+j)/2];while(i<=j){while(t[i]>mid)  i++;while(t[j]<mid)  j--;if(i<=j){t1=t[i];t[i]=t[j];t[j]=t1;t1=s[i];s[i]=s[j];s[j]=t1;i++;j--;}}if(i<right)  quicksort(i,right);if(j>left)   quicksort(left,j);return 0;
}
int main()
{int i;fin=fopen("lifts.in","r");fout=fopen("lifts.out","w");fscanf(fin,"%d%d",&n,&m);for(i=1;i<=n;i++)fscanf(fin,"%d%d",&s[i],&t[i]);quicksort(1,n);dfs(m);fprintf(fout,"%.5lf",ans);fclose(fin);fclose(fout);return 0;
}

T4:

暗夜骑士  NightOfKnights.cpp

问题描述:

你现在负责管理骑士, 也就是负责城堡的守卫工作。

现在告诉你一个N*M的矩阵, 上面有一些位置有骑士, 有一个位置有入侵者, 还有一个位置是城堡的入口。骑士每一个单位时间, 都会扩展一格视野。 假设骑士在x,y, 那么在时间t, 任意格子i,j,只要满足|x-i|+|y-j|<=t, 那么这些格子上的入侵者都是可以发现的。入侵者每一个单位时间最多可以走一步(可以不走, 方向为上下左右中的一个)。

一旦入侵者被发现就会逃走, 如果在城堡入口被发现了, 也会逃走。你只需要回答最多有多少入侵者可能进入。

输入格式:

第一行4个整数, N,M

下面N行M列的整数描述题中的矩阵, 0表示空地, 1表示骑士, 2表示入侵者, 3表示城堡入口。

输出格式:

输出一行一个整数, 表示最多有多少入侵者可能进入。

样例输入:

6 5

0 0 3 0 0

0 2 0 0 0

0 0 2 0 1

0 0 1 0 0

1 0 0 0 0

0 0 0 2 0

样例输出:

2

数据规模:

40%:N,M 不超过 100, 入侵者和骑士都不超过10

100%: 所有数字不超过1000, 包括骑士数量, 入侵者数量。

这道题名字没有翻成黑暗骑士真是很遗憾了。我用了一个贪心的想法,假如你一个入侵者到城堡的距离>=离城堡最近的骑士的距离,那有请下一位入侵者。粗算一下复杂度觉得怎么写都ok就写了个最原始的三次循环于是就是众人中跑的最慢的,附上代码:

#include<math.h>
#include<stdio.h>
#include<stdlib.h>
FILE*fin,*fout;
int w[1005][1005]={0};
int n,m,cx,cy,ans=0,min=2147483631;
int main()
{int i,j;fin=fopen("nightofknights.in","r");fout=fopen("nightofknights.out","w");fscanf(fin,"%d%d",&n,&m);for(i=1;i<=n;i++)for(j=1;j<=m;j++){fscanf(fin,"%d",&w[i][j]);if(w[i][j]==3){cx=i;cy=j;}}for(i=1;i<=n;i++)for(j=1;j<=m;j++)if(w[i][j]==1){if(abs(cx-i)+abs(cy-j)<min)min=abs(cx-i)+abs(cy-j);}for(i=1;i<=n;i++)for(j=1;j<=m;j++)if(w[i][j]==2)if(abs(cx-i)+abs(cy-j)<min)ans++;fprintf(fout,"%d",ans);fclose(fin);fclose(fout);return 0;
}

20181027解题报告相关推荐

  1. uscao 线段树成段更新操作及Lazy思想(POJ3468解题报告)

    线段树成段更新操作及Lazy思想(POJ3468解题报告) 标签: treequerybuildn2cstruct 2011-11-03 20:37 5756人阅读 评论(0) 收藏 举报  分类: ...

  2. 解题报告(十八)数论题目泛做(Codeforces 难度:2000 ~ 3000 + )

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量的题解和代码,题目难度不一 ...

  3. 【解题报告系列】超高质量题单 + 题解(ACM / OI)超高质量题解

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我新写的超高质量的题解和代码,题目难度不 ...

  4. 解题报告(三)多项式求值与插值(拉格朗日插值)(ACM / OI)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量的题解和代码,题目难度不一 ...

  5. 解题报告(十三)中国剩余定理(ACM / OI)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量的题解和代码,题目难度不一 ...

  6. 解题报告(四)生成函数(ACM/ OI)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量的题解和代码,题目难度不一 ...

  7. 解题报告(八) prufer 序列与 Cayley 公式(ACM / OI)超高质量题解

    繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量题解和代码,题目难度不一定按照题号排序,我会在每道题后面加上题目难度指数(1∼51 \sim 51∼5),以模板题难度 11 ...

  8. 解题报告(一)E、(BZOJ4589)Hard Nim(博弈论 + FWT)

    繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量题解和代码,题目难度不一定按照题号排序,我会在每道题后面加上题目难度指数(1∼51 \sim 51∼5),以模板题难度 11 ...

  9. 解题报告(五)组合计数(ACM / OI)超高质量题解

    繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量题解和代码,题目难度不一定按照题号排序,我会在每道题后面加上题目难度指数(1∼51 \sim 51∼5),以模板题难度 11 ...

最新文章

  1. 浅析优化不同类型关键词都需要周期几何?
  2. Linux Linux程序练习十二(select实现QQ群聊)
  3. Redhat Mongodb学习笔记
  4. 常用的字符串加密解密工具类
  5. Mr.J--Bootstrap使用
  6. Spring-aop-Advisor接口与Pointcut接口
  7. php sphinx mysql_windows7使用Sphinx+PHP+MySQL详细介绍
  8. 【OpenCV】图像分割
  9. 使用idea进行Maven打包异常:Failed to execute goal org.apache.maven.plugins:maven-war-plugin:2.2:war
  10. 联想电脑无法正常开机常见现象和方案汇总(拯救者R7000)
  11. 初中计算机位图和矢量图教案,浅析图形图像软件教学中位图与矢量图的区别
  12. 【modelarts】华为人工智能平台_modelarts平台系列教程1
  13. poi导出Excel,表格画斜线,并设置数据
  14. matlab信道容量函数,信息论-matlab求信道容量(迭代法)
  15. 教你如何使用关键词获取淘宝和天猫的商品信息
  16. 转:深网 | 中国手机往事:因为雷军、罗永浩们,中国才告别山寨机
  17. 恐怖的广告推送。其实,我们每天都在“裸奔”!
  18. 时间序列:Shapelets
  19. GIS原理与技术-平时作业
  20. 软件开发的管理和控制

热门文章

  1. 怎样优化Apache服务器的性能
  2. jQuery弹幕插件
  3. Android tips(十二)--Android开发中使用矢量图
  4. 高德导航免费,那他靠什么收入?
  5. 初学Python可能会遇见的小程序
  6. Linux SDIO WIFI Marvell8801/Marvell88w8801(五) --- Linux SDIO API介绍
  7. 三极管基极下拉电阻的作用
  8. python利用以下公式求π的值_使用Python计算 π 值
  9. LeetCode79 Word Search
  10. 【NOWCODE SEVEN】:二分查找/排序