作业
2016-07-14 21:30
239 查看
No.1 家庭作业(homework.cpp)
【问题描述】
求:方程 x1+x2+xn=m的所有非负整数解(x1,x2,„,xn)的个数。例如,方程:x1+x2+ x3+ x4+ x5=5有7组解:(5,0,0,0,0)、(3,1,0 ,0,0)、……、(0,0,0,0,1)。
【输入数据】(homework.in)
2个整数n,m
【输出数据】(homework.out)
方程非负整数解的个数ans,如果解超过10^9,只需输出ans mod 10^9。
【输入样例】 : 5 5
【输出样例】 : 7
【数据范围】 :
1≤n≤5000;0≤m≤5000。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
这题大概就是需要注意范围。
要long long
过程中就这样a[j]=(a[j]+a[j-i])%1000000000
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
c代码如下~
No.2 魔法石的诱惑(rob.cpp)
问题描述 ###不要吐槽剧情为什么和问题毫无关联= =###
修罗王远远地看见狼王狂奔而来,问道:“慌慌张张干什么?”
狼王大口大口喘气:“一家魔法石店,看到摆着那么多高阶魔法石,我就去抢了一大袋。”
修罗王怒道:“光天化日,朗朗乾坤,众目睽睽之下,你也敢抢?”
狼王:“我只看到了魔法石,没有看到人。。。”
修罗王:“。。。。。”
其实狼王的贪婪也很容易理解,因为高阶魔法石有一个特征,即它的重量进行阶乘运算后末尾有几个0,就拥有同等重量普通魔法石几倍的法力,例如5!=5x4x3x2x1=120,所以120有一个0,这意味着该魔法石拥有同等重量的普通魔法石1倍的魔法力,你的任务是找到最小的自然数N,使N!在十进制下有Q个0结尾。
输入格式(rob.in)
一个数Q(0≤Q≤10^8)
输出格式(rob.out)
如果无解,输出”No solution”,否则输出N
输入样例
2
输出样例
10
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
这题有种找规律的感觉。。。。。汗。
结尾是0的话,那就得×10,也就是2x5,2很多,主要就看5的个数。
while(n>0){
ans=ans+n/5;
n=n/5;
}
就这么一直÷就好了= =!。嗯
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
c代码如下~
No.3 架设电话线(phoneline.cpp)
Farmer John打算将电话线引到自己的农场,但电信公司并不打算为他提供免费服务。于是,FJ必须为此向电信公司支付一定的费用。
FJ的农场周围分布着N(1 <= N <= 1,000)根按1..N顺次编号的废弃的电话线杆,任意两根电话线杆间都没有电话线相连。一共P(1 <= P <= 10,000)对电话线杆间可以拉电话线,其余的那些由于隔得太远而无法被连接。
第i对电话线杆的两个端点分别为A_i、B_i,它们间的距离为L_i (1 <= L_i <= 1,000,000)。数据中保证每对{A_i,B_i}最多只出现1次。编号为1的电话线杆已经接入了全国的电话网络,整个农场的电话线全都连到了编号为N的电话线杆上。也就是说,FJ的任务仅仅是找一条将1号和N号电话线杆连起来的路径,其余的电话线杆并不一定要连入电话网络。
经过谈判,电信公司最终同意免费为FJ连结K(0 <= K < N)对由FJ指定的电话线杆。对于此外的那些电话线,FJ需要为它们付的费用,等于其中最长的电话线的长度(每根电话线仅连结一对电话线杆)。如果需要连结的电话线杆不超过K对,那么FJ的总支出为0。
请你计算一下,FJ最少需要在电话线上花多少钱。
输入(phoneline.in)
* 第1行: 3个用空格隔开的整数:N,P,K
* 第2..P+1行: 第i+1行为3个用空格隔开的整数:A【i】,B【i】,L【i】
输出(phoneline.out)
* 第1行: 输出1个整数,为FJ在这项工程上的最小支出。如果任务不可能完成,输出-1
样例输入
5 7 1
1 2 5
3 1 4
2 4 8
3 2 3
5 2 9
3 4 7
4 5 6
样例输出
4
输入说明:
一共有5根废弃的电话线杆。电话线杆1不能直接与电话线杆4、5相连。电话线杆5不能直接与电话线杆1、3相连。其余所有电话线杆间均可拉电话线。电信公司可以免费为FJ连结一对电话线杆。
输出说明:
FJ选择如下的连结方案:1->3;3->2;2->5,这3对电话线杆间需要的电话线的长度分别为4、3、9。FJ让电信公司提供那条长度为9的电话线,于是,他所需要购买的电话线的最大长度为4。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
二话不说先来个图储存先~
邻接表 静态链表储存
二分答案,在判定是否可行时,只需要判断是否能寻找到一条路径,使得该路径上大于我们二分的这个值的边不超过k条,应该就是最短路做的一个变形,<分的值的边可以看做边权=0,>可以看做边权为1,直接SPFA求最短路就
a411
好咯
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
c代码如下~
(///^///).有错请指出~
【问题描述】
求:方程 x1+x2+xn=m的所有非负整数解(x1,x2,„,xn)的个数。例如,方程:x1+x2+ x3+ x4+ x5=5有7组解:(5,0,0,0,0)、(3,1,0 ,0,0)、……、(0,0,0,0,1)。
【输入数据】(homework.in)
2个整数n,m
【输出数据】(homework.out)
方程非负整数解的个数ans,如果解超过10^9,只需输出ans mod 10^9。
【输入样例】 : 5 5
【输出样例】 : 7
【数据范围】 :
1≤n≤5000;0≤m≤5000。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
这题大概就是需要注意范围。
要long long
过程中就这样a[j]=(a[j]+a[j-i])%1000000000
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
c代码如下~
#include<stdio.h> long long a[6000]; int main(){ freopen("homework.in","r",stdin); freopen("homework.out","w",stdout); int n,m; scanf("%d%d",&n,&m); a[0]=1; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) a[j]=(a[j]+a[j-i])%1000000000; printf("%lld",a[m]); return 0; }
No.2 魔法石的诱惑(rob.cpp)
问题描述 ###不要吐槽剧情为什么和问题毫无关联= =###
修罗王远远地看见狼王狂奔而来,问道:“慌慌张张干什么?”
狼王大口大口喘气:“一家魔法石店,看到摆着那么多高阶魔法石,我就去抢了一大袋。”
修罗王怒道:“光天化日,朗朗乾坤,众目睽睽之下,你也敢抢?”
狼王:“我只看到了魔法石,没有看到人。。。”
修罗王:“。。。。。”
其实狼王的贪婪也很容易理解,因为高阶魔法石有一个特征,即它的重量进行阶乘运算后末尾有几个0,就拥有同等重量普通魔法石几倍的法力,例如5!=5x4x3x2x1=120,所以120有一个0,这意味着该魔法石拥有同等重量的普通魔法石1倍的魔法力,你的任务是找到最小的自然数N,使N!在十进制下有Q个0结尾。
输入格式(rob.in)
一个数Q(0≤Q≤10^8)
输出格式(rob.out)
如果无解,输出”No solution”,否则输出N
输入样例
2
输出样例
10
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
这题有种找规律的感觉。。。。。汗。
结尾是0的话,那就得×10,也就是2x5,2很多,主要就看5的个数。
while(n>0){
ans=ans+n/5;
n=n/5;
}
就这么一直÷就好了= =!。嗯
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
c代码如下~
#include <stdio.h> int solve(int n){ int ans=0; while(n>0){ ans=ans+n/5; n=n/5; } return ans; } int main(){ int Q,i; scanf("%d",&Q); int start=1,end=500000000,ans=500000001,mid,t; while (start<=end){ int mid=(end-start)/2+start; int t=solve(mid); if(t==Q&&mid<ans) ans=mid; if(t>Q) end=mid-1; else if(t<Q) start=mid+1; else end=mid-1; } if(ans!=500000001) printf("%d",ans); else printf("No solution"); return 0; }
No.3 架设电话线(phoneline.cpp)
Farmer John打算将电话线引到自己的农场,但电信公司并不打算为他提供免费服务。于是,FJ必须为此向电信公司支付一定的费用。
FJ的农场周围分布着N(1 <= N <= 1,000)根按1..N顺次编号的废弃的电话线杆,任意两根电话线杆间都没有电话线相连。一共P(1 <= P <= 10,000)对电话线杆间可以拉电话线,其余的那些由于隔得太远而无法被连接。
第i对电话线杆的两个端点分别为A_i、B_i,它们间的距离为L_i (1 <= L_i <= 1,000,000)。数据中保证每对{A_i,B_i}最多只出现1次。编号为1的电话线杆已经接入了全国的电话网络,整个农场的电话线全都连到了编号为N的电话线杆上。也就是说,FJ的任务仅仅是找一条将1号和N号电话线杆连起来的路径,其余的电话线杆并不一定要连入电话网络。
经过谈判,电信公司最终同意免费为FJ连结K(0 <= K < N)对由FJ指定的电话线杆。对于此外的那些电话线,FJ需要为它们付的费用,等于其中最长的电话线的长度(每根电话线仅连结一对电话线杆)。如果需要连结的电话线杆不超过K对,那么FJ的总支出为0。
请你计算一下,FJ最少需要在电话线上花多少钱。
输入(phoneline.in)
* 第1行: 3个用空格隔开的整数:N,P,K
* 第2..P+1行: 第i+1行为3个用空格隔开的整数:A【i】,B【i】,L【i】
输出(phoneline.out)
* 第1行: 输出1个整数,为FJ在这项工程上的最小支出。如果任务不可能完成,输出-1
样例输入
5 7 1
1 2 5
3 1 4
2 4 8
3 2 3
5 2 9
3 4 7
4 5 6
样例输出
4
输入说明:
一共有5根废弃的电话线杆。电话线杆1不能直接与电话线杆4、5相连。电话线杆5不能直接与电话线杆1、3相连。其余所有电话线杆间均可拉电话线。电信公司可以免费为FJ连结一对电话线杆。
输出说明:
FJ选择如下的连结方案:1->3;3->2;2->5,这3对电话线杆间需要的电话线的长度分别为4、3、9。FJ让电信公司提供那条长度为9的电话线,于是,他所需要购买的电话线的最大长度为4。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
二话不说先来个图储存先~
邻接表 静态链表储存
二分答案,在判定是否可行时,只需要判断是否能寻找到一条路径,使得该路径上大于我们二分的这个值的边不超过k条,应该就是最短路做的一个变形,<分的值的边可以看做边权=0,>可以看做边权为1,直接SPFA求最短路就
a411
好咯
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
c代码如下~
#include<stdio.h> #include<string.h> struct data{int to,next,v;}e[20001]; int n,p,k,cnt,head[1001],dis[1001],q[1001],inq[1001],ans=-1; void insert(int u,int v,int w){ cnt++; e[cnt].to=v; e[cnt].v=w; e[cnt].next=head[u]; head[u]=cnt; } bool spfa(int x){ memset(dis,127/3,sizeof(dis)); int t=0,w=1,i,now,s; dis[1]=0;q[t]=1;inq[1]=1; while(t!=w){ now=q[t];t++;if(t==1001)t=0; i=head[now]; while(i) { if(e[i].v>x)s=dis[now]+1; else s=dis[now]; if(s<dis[e[i].to]){ dis[e[i].to]=s; if(!inq[e[i].to]){ q[w++]=e[i].to; inq[e[i].to]=1; if(w==1001) w=0; } } i=e[i].next; } inq[now]=0; } if(dis <=k) return 1; return 0; } int main(){ scanf("%d%d%d",&n,&p,&k); for(int i=1;i<=p;i++){ int u,v,w; scanf("%d%d%d",&u,&v,&w); insert(u,v,w);insert(v,u,w); } int l=0,r=1000000; while(l<=r){ int mid=(l+r)>>1; if(spfa(mid)){ ans=mid; r=mid-1; } else l=mid+1; } printf("%d",ans); return 0; }
(///^///).有错请指出~
相关文章推荐
- SQL Server 作业批量停止
- Linux C函数参考手册(PDF版)
- C# partial关键字说明
- Lua教程(十七):C API简介
- 简单谈谈lua和c的交互
- C#用链式方法表达循环嵌套
- SQL2008定时任务作业创建教程
- C#中的委托数据类型简介
- C#编写的艺术字类实例代码
- C#实现打造气泡屏幕保护效果
- 基于C#技术实现身份证识别功能
- 举例讲解C#编程中委托的实例化使用
- 使用C#代码获取存储过程返回值
- C和指针小结(推荐)
- C++中explict关键字用法
- C/C++数据对齐详细解析
- 利用C语言来求最大连续子序列乘积的方法
- 字符串的组合算法问题的C语言实现攻略
- C 语言基础教程(我的C之旅开始了)[三]