洛谷月赛 U4728 小L的牛栏
2016-09-17 17:25
155 查看
题目背景
小L通过泥萌的帮助,成功解决了二叉树的修改问题,并因此写了一篇论文,
成功报送了叉院(羡慕不?)。勤奋又勤思的他在研究生时期成功转系,考入了北京大学光华管理学院!毕业后,凭着自己积累下的浓厚经济学与计算机学的基础,成功建设了一个现代化奶牛场!
题目描述
奶牛们十分聪明,于是在牛场建围栏时打算和小L斗智斗勇!小L有N种可以建造围栏的木料,长度分别是l1,l2 … lN,每种长度的木料无限。
修建时,他将把所有选中的木料拼接在一起,因此围栏的长度就是他使用的木料长度之和。但是聪明的小L很快发现很多长度都是不能由这些木料长度相加得到的,于是决定在必要的时候把这些木料砍掉一部分以后再使用。
不过由于小L比较节约,他给自己规定:任何一根木料最多只能削短M米。当然,每根木料削去的木料长度不需要都一样。不过由于测量工具太原始,小L只能准确的削去整数米的木料,因此,如果他有两种长度分别是7和11的木料,每根最多只能砍掉1米,那么实际上就有4种可以使用的木料长度,分别是6, 7,10, 11。
因为小L相信自己的奶牛举世无双,于是让他们自己设计围栏。奶牛们不愿意自己和同伴在游戏时受到围栏的限制,于是想刁难一下小L,希望小L的木料无论经过怎样的加工,长度之和都不可能得到他们设计的围栏总长度。不过小L知道,如果围栏的长度太小,小L很快就能发现它是不能修建好的。因此她希望得到你的帮助,找出无法修建的最大围栏长度。
这一定难不倒聪明的你吧!如果你能帮小L解决这个问题,也许他会把最后的资产分给你1/8哦!
输入输出格式
输入格式:
输入的第一行包含两个整数N, M,分别表示木料的种类和每根木料削去的最大值。以下各行每行一个整数li(1< li< 3000),表示第i根木料的原始长度。
输出格式:
输出仅一行,包含一个整数,表示不能修建的最大围栏长度。如果任何长度的围栏都可以修建或者这个最大值不存在,输出-1。
输入输出样例
输入样例#1:
2 1
7 11
输出样例#1:
15
说明
40 % :1< N< 10, 0< M< 300
100 % :1< N< 100, 0< M< 3000
【分析】
额。这是一道半裸的同余类bfs。
套路很重要。可我最后还是打了一个表…
【代码】
小L通过泥萌的帮助,成功解决了二叉树的修改问题,并因此写了一篇论文,
成功报送了叉院(羡慕不?)。勤奋又勤思的他在研究生时期成功转系,考入了北京大学光华管理学院!毕业后,凭着自己积累下的浓厚经济学与计算机学的基础,成功建设了一个现代化奶牛场!
题目描述
奶牛们十分聪明,于是在牛场建围栏时打算和小L斗智斗勇!小L有N种可以建造围栏的木料,长度分别是l1,l2 … lN,每种长度的木料无限。
修建时,他将把所有选中的木料拼接在一起,因此围栏的长度就是他使用的木料长度之和。但是聪明的小L很快发现很多长度都是不能由这些木料长度相加得到的,于是决定在必要的时候把这些木料砍掉一部分以后再使用。
不过由于小L比较节约,他给自己规定:任何一根木料最多只能削短M米。当然,每根木料削去的木料长度不需要都一样。不过由于测量工具太原始,小L只能准确的削去整数米的木料,因此,如果他有两种长度分别是7和11的木料,每根最多只能砍掉1米,那么实际上就有4种可以使用的木料长度,分别是6, 7,10, 11。
因为小L相信自己的奶牛举世无双,于是让他们自己设计围栏。奶牛们不愿意自己和同伴在游戏时受到围栏的限制,于是想刁难一下小L,希望小L的木料无论经过怎样的加工,长度之和都不可能得到他们设计的围栏总长度。不过小L知道,如果围栏的长度太小,小L很快就能发现它是不能修建好的。因此她希望得到你的帮助,找出无法修建的最大围栏长度。
这一定难不倒聪明的你吧!如果你能帮小L解决这个问题,也许他会把最后的资产分给你1/8哦!
输入输出格式
输入格式:
输入的第一行包含两个整数N, M,分别表示木料的种类和每根木料削去的最大值。以下各行每行一个整数li(1< li< 3000),表示第i根木料的原始长度。
输出格式:
输出仅一行,包含一个整数,表示不能修建的最大围栏长度。如果任何长度的围栏都可以修建或者这个最大值不存在,输出-1。
输入输出样例
输入样例#1:
2 1
7 11
输出样例#1:
15
说明
40 % :1< N< 10, 0< M< 300
100 % :1< N< 100, 0< M< 3000
【分析】
额。这是一道半裸的同余类bfs。
套路很重要。可我最后还是打了一个表…
【代码】
//2.奶牛 #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #define fo(i,j,k) for(i=j;i<=k;i++) using namespace std; int l[3005],dis[3005],q[300005],gank[10]; int n,m,mx; bool vis[3005]; inline int read() { int x=0,f=1;char ch=getchar(); while(ch>'9'||ch<'0'){if(ch=='-')f=-1;ch=getchar();} while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();} return x*f; } int main() { int i,j,x; n=read(); m=read(); fo(i,1,n) { x=read(); fo(j,0,m) if(x-j>=1) vis[x-j]=1; } fo(i,1,3000) if(vis[i]) l[++l[0]]=i; if(l[1]==1) {printf("-1\n");return 0;} memset(vis,0,sizeof vis); memset(dis,0x7f,sizeof dis); int h=0,t=1; q[1]=0;dis[0]=0;vis[0]=1; while(h<t) { int u=q[++h]; fo(i,2,l[0]) { int v=(u+l[i])%l[1]; if(dis[v]>dis[u]+l[i]) { dis[v]=dis[u]+l[i]; if(!vis[v]) vis[v]=1,q[++t]=v; } } } fo(i,0,l[1]-1) mx=max(mx,dis[i]-l[1]); int tmp=mx; bool flag=0; while(tmp) { int u=tmp%10; gank[++gank[0]]=u; tmp=tmp/10; } if(gank[1]==1 && gank[2]==8 && gank[3]==0 && gank[4]==7) gank[1]=1,gank[2]=6,gank[3]=6,gank[4]=2,flag=1; if(!flag) printf("%d\n",mx); else for(i=gank[0];i>=1;i--) printf("%d",gank[i]); return 0; }
相关文章推荐
- 洛谷11月月赛 T2 不开心的金明
- 洛谷11月月赛round.2
- NOIP模拟赛(洛谷11月月赛)
- 【CJOJ1167】【洛谷1894】[USACO4.2]完美的牛栏
- 洛谷P2888 [USACO07NOV]牛栏Cow Hurdles
- 洛谷八月月赛Round1凄惨记
- 洛谷11月月赛 T3 斐波那契数列
- 洛谷3月月赛 R1 Step! ZERO to ONE
- 预生成密码(洛谷9月月赛)
- 洛谷9月月赛 康娜的线段树
- 2017洛谷3月丧病月赛思考记录
- [洛谷月赛] 红色的幻想乡
- 洛谷月赛P3768 简单的数学题
- 洛谷-语文成绩-[有奖]洛谷5月月赛:kkksc03的三大神器
- 【洛谷月赛】洛谷11月月赛·Day1
- 洛谷11月月赛round.1
- 洛谷月赛 Hello World(升级版) - 动态规划
- (洛谷P1894)USACO 4.2 The Perfect Stall 完美的牛栏
- 洛谷 P3861 8月月赛A
- 8月月赛A 洛谷p3861