NOIP复习篇———枚举
打地鼠是这样的一个游戏:地面上有一些地鼠洞,地鼠们会不时从洞里探出头来很短时间后又缩回洞中。玩家的目标是在地鼠伸出头时,用锤子砸其头部,砸到的地鼠越多分数也就越高。
游戏中的锤子每次只能打一只地鼠,如果多只地鼠同时探出头,玩家只能通过多次挥舞锤子的方式打掉所有的地鼠。你认为这锤子太没用了,所以你改装了锤子,增加了锤子与地面的接触面积,使其每次可以击打一片区域。如果我们把地面看做m*n的方阵,其每个元素都代表一个地鼠洞,那么锤子可以覆盖R*C区域内的所有地鼠洞。但是改装后的锤子有一个缺点:每次挥舞锤子时,对于这R*C的区域中的所有地洞,锤子会打掉恰好一只地鼠。也就是说锤子覆盖的区域中,每个地洞必须至少有1只地鼠,且如果某个地洞中地鼠的个数大于1,那么这个地洞只会有1只地鼠被打掉,因此每次挥舞锤子时,恰好有R*C只地鼠被打掉。由于锤子的内部结构过于精密,因此在游戏过程中你不能旋转锤子(即不能互换R和C)。
你可以任意更改锤子的规格(即你可以任意规定R和C的大小),但是改装锤子的工作只能在打地鼠前进行(即你不可以打掉一部分地鼠后,再改变锤子的规格)。你的任务是求出要想打掉所有的地鼠,至少需要挥舞锤子的次数。
Hint:由于你可以把锤子的大小设置为1*1,因此本题总是有解的。
第一行包含两个正整数m和n;
下面m行每行n个正整数描述地图,每个数字表示相应位置的地洞中地鼠的数量。
输出一个整数,表示最少的挥舞次数。
3 3
1 2 1
2 4 2
1 2 1
4
使用2*2的锤子,分别在左上、左下、右上、右下挥舞一次。
对于30%的数据,m,n≤5;
对于60%的数据,m,n≤30;
对于100%的数据,m,n≤100,其他数据不小于0,不大于105。
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdio>
#include <cstdlib>
#include <vector>
#include <queue>
#include <list>
#include <deque>
#include <string>
using namespace std;const int MaxN=101;int g[MaxN][MaxN],allsum=0;
int n,m,r,c,ans=0x7fffffff;
int tmp[MaxN][MaxN];bool ok(){int i,j,i1,j1;for(i=1;i<=n;i++)for(j=1;j<=m;j++)tmp[i][j]=g[i][j];for(i=1;i<=n;i++)//枚举中心点 for(j=1;j<=m;j++)if(tmp[i][j]){if(i+r<=n+1 && j+c<=m+1){int delta=tmp[i][j];for(i1=0;i1<r;i1++)for(j1=0;j1<c;j1++)tmp[i+i1][j+j1]-=delta;if(tmp[i1+i][j1+j]<0)return false;}else return false;}return true;
}int main(){scanf("%d%d",&n,&m);for(r=1;r<=n;r++)for(c=1;c<=m;c++){scanf("%d",&g[r][c]);allsum+=g[r][c];}for(r=1;r<=n;r++)//枚举锤子的长宽 for(c=1;c<=m;c++){if(allsum%(r*c)==0 && allsum/(r*c)<ans && ok()==true)ans=allsum/(r*c);}cout<<ans;return 0;
}
Jam是个喜欢标新立异的科学怪人。他不使用阿拉伯数字计数,而是使用小写英文字母计数,他觉得这样做,会使世界更加丰富多彩。在他的计数法中,每个数字的位数都是相同的(使用相同个数的字母),英文字母按原先的顺序,排在前面的字母小于排在它后面的字母。我们把这样的“数字”称为Jam数字。在Jam数字中,每个字母互不相同,而且从左到右是严格递增的。每次,Jam还指定使用字母的范围,例如,从2到10,表示只能使用{b,c,d,e,f,g,h,i,j}这些字母。如果再规定位数为5,那么,紧接在Jam数字“bdfij”之后的数字应该是“bdghi”。(如果我们用U、V依次表示Jam数字“bdfij”与“bdghi”,则U<V< span>,且不存在Jam数字P,使U<P<V< span>)。你的任务是:对于从文件读入的一个Jam数字,按顺序输出紧接在后面的5个Jam数字,如果后面没有那么多Jam数字,那么有几个就输出几个。
有2行,第1行为3个正整数,用一个空格隔开:
s t w
(其中s为所使用的最小的字母的序号,t为所使用的最大的字母的序号。w为数字的位数,这3个数满足:1≤s<T< span>≤26, 2≤w≤t-s )
第2行为具有w个小写字母的字符串,为一个符合要求的Jam数字。
所给的数据都是正确的,不必验证。
最多为5行,为紧接在输入的Jam数字后面的5个Jam数字,如果后面没有那么多Jam数字,那么有几个就输出几个。每行只输出一个Jam数字,是由w个小写字母组成的字符串,不要有多余的空格
2 10 5
bdfij
bdghi
bdghj
bdgij
bdhij
befgh
#分析#
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdio>
#include <cstdlib>
#include <vector>
#include <queue>
#include <list>
#include <deque>
#include <string>
using namespace std;const int MaxN=300;char str[MaxN];
int s,t,w,l;int main(){int i;cin>>s>>t>>w;scanf("%s",str);l=strlen(str)-1;for(i=1;i<=5;i++){int j=l;while(j>=0 && str[j]==t+97+j-w)j--;if(j==-1)break;str[j]++;for(int k=j+1;k<=w-1;k++)str[k]=str[k-1]+1;cout<<str<<endl;}return 0;
}
《合数和》
用户输入一个数,然后输出从1开始一直到这个数为止(包括这个数)中所有的合数的和。
一个整数N,0<N<=1000
一行,一个整数,即从1到N中所有合数的和
样例一:100
样例二:9
样例一:3989
样例二:27
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdio>
#include <cstdlib>
#include <vector>
#include <queue>
#include <list>
#include <deque>
#include <string>
using namespace std;const int MaxN=1001;int p[MaxN],sum,n;int getans(){int i,j;memset(p,1,sizeof(p));for(i=2;i<=n;i++)if(p[i])for(j=i*i;j<=n;j+=i)p[j]=0;for(i=2;i<=n;i++)if(!p[i])sum+=i;return sum;
}int main(){scanf("%d",&n);cout<<getans();return 0;
}
1.3 枚举算法的反思
NOIP复习篇———枚举相关推荐
- NOIP复习篇———动态规划
NOIP复习篇---动态规划 ------------------------------------------------------------------------------------- ...
- NOIP复习篇———贪心
NOIP复习篇---贪心 --------------------------------------------------------------------------------------- ...
- C语言复习篇之数组与指针
C语言复习篇之数组与指针 学习了一段时间的嵌入式linux了,学习中有很多的东西需要总结,有经验有教训,我觉得把他写下来会更好,就当做是一种笔记的形式,记录学习中的点点滴滴,不仅仅自己可以经常复习,也 ...
- 用不同的姿势求逆序对(复习篇)
用不同的姿势求逆序对(复习篇) 文章目录 用不同的姿势求逆序对(复习篇) 前言 讲解 归并排序 树状数组 线段树 题目 思路 代码 归并排序求逆序对 树状数组求逆序对 线段树求逆序对 历届试题 小朋友 ...
- 最小生成树,回忆复习篇。
最小生成树,回忆复习篇. 以前听过一遍最小生成树,可惜,当时没弄会.过了几天就全忘了.而如今在做LCA的时候,woc我居然不会最小生成树了. 所以来回忆一下最小生成树. kruskal算法.这个算法的 ...
- Android期末复习篇_传智课后习题以及答案(选择、填空、判断、简答、编码题)
写在前面 此为移动应用开发传智课后习题及答案,供期末复习使用,注意 答案仅供参考 加粗题目为强调 题型涉及:选择.判断.填空.简答.编程题 另8章习题及答案汇总:Android期末复习篇_8章节练习题 ...
- 扩展欧几里得复习篇。
扩展欧几里得复习篇. 由于多校考了欧几里得,所以这里复习一波扩欧. 这里主要讲解利用扩欧求解二元一次方程的整数解问题. 0.求解: a x + b y = g c d ( a , b ) ax+by= ...
- 冲刺NOIP复习,算法知识点总结
前言 离NOIP还有一个星期,匆忙的把整理的算法补充完善,看着当时的整理觉得那时还年少.第二页贴了几张从贴吧里找来的图片,看着就很热血的.当年来学这个竞赛就是为了兴趣,感受计算机之美的. ...
- 2019秋招备战复习篇
@TOC## ? 目录 ➕ C/C++ ⭐️ Effective ? STL 〽️ 数据结构 ⚡️ 算法 ❓ Problems ? 操作系统 ☁️ 计算机网络 ? 网络编程 ? 数据库 ? 设计模式 ...
最新文章
- Linuxshell之结构化命令
- JDBC+Servlet+JSP整合开发之22.JSP简介
- ubuntu下python thrift安装
- 十问十答 GPL 许可证
- webService发布在IIS服务器上
- 1. MFC编程——变量命名规则
- android os 2.2刷机包,N1内置CoreELEC9.2.2、安卓7.1.2双系统刷机包,全功能刷机包V2.2...
- calendar控件使用 extjs_Calendar 日历控件使用
- [转帖]方正数码发布基于龙芯3A3000系列整机
- mysql 分组查询 语句_MySQL分组查询
- Mr.张小白(案例:基于Spring MVC实现后台登陆系统验证)
- mysql constant number,Mysql报Too many connections,不要乱用ulimit了,看看如何正确修改进程的最大文件数...
- 今日头条面试——测试工程师
- 微信公众号如何分享课件PPT?
- Leap Motion 之Unity 开发实战(一. 制作手的HandController)
- 跨境电商淘宝详情解决方案
- Matlab/simulink通信系统仿真入门操作
- 报表可视化源码,操作界面可视化,通过简易配置即可自动生成各种类型的报表,为企业节省大量的重复开发工作
- python+opencv-03 高斯模糊
- java文件用editplus乱码,EditPlus中文乱码问题