扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
OpenJudge NOI 2.1 7623:五户共井问题
成都创新互联专注于中大型企业的成都网站设计、成都做网站和网站改版、网站营销服务,追求商业策划与数据分析、创意艺术与技术开发的融合,累计客户上千,服务满意度达97%。帮助广大客户顺利对接上互联网浪潮,准确优选出符合自己需要的互联网运用,我们将一直专注成都品牌网站建设和互联网程序开发,在前进的路上,与客户一起成长!【题目考点】 1. 枚举 【解题思路】设井深为h,A、B、C、D、E家的绳长分别为a、b、c、d、e。
把输入的k自己乘以100,从以米为单位转为以厘米为单位。
先想最直接的枚举思路
若以这种方法做枚举,那么h要从1枚举到k(k单位为厘米时,大2000),a~e都要从1枚举到h,大枚举次数为 1 5 + 2 5 + . . . + 200 0 5 1^5+2^5+...+2000^5 15+25+...+20005,该枚举次数显然是不可接受的。
观察该方程组,共有6个未知数5个方程,只要确定其中一个未知数后,就可以解方程。不过那样解方程比较麻烦。比较方便的做法是确定两个未知数。
枚举对象:h, a
枚举范围:
1
≤
h
≤
k
1\le h \le k
1≤h≤k
因为
b
>
0
b>0
b>0,且
a
⋅
n
1
+
b
=
h
a\cdot n_1 + b = h
a⋅n1+b=h,所以有
a
>
0
a >0
a>0且
a
⋅
n
1
<
h
a\cdot n1< h
a⋅n1
判断条件:
判断
e
⋅
n
5
+
a
=
h
e\cdot n_5 + a = h
e⋅n5+a=h是否成立。且a, b, c, d, e互不相等。
当k为2000, n 1 n_1 n1为1时,总枚举次数为 1 + 2 + . . . + 2000 = ( 1 + 2000 ) ∗ 2000 / 2 = 2001000 1+2+...+2000 = (1+2000)*2000/2=2001000 1+2+...+2000=(1+2000)∗2000/2=2001000,可以接受。
【题解代码】 解法1:枚举#includeusing namespace std;
int main()
{int k, n1, n2, n3, n4, n5;
cin >>k >>n1 >>n2 >>n3 >>n4 >>n5;
k *= 100;//单位变为厘米
for(int h = 1; h<= k; ++h)
for(int a = 1; a*n1< h; ++a)
{ int b = h-a*n1, c = h-b*n2, d = h-c*n3, e = h-d*n4;
if(a != b && a != c && a != d && a != e && b != c &&
b != d && b != e && c != d && c != e && d != e && e*n5+a == h)
{ cout<< h<< ' '<< a<< ' '<< b<< ' '<< c<< ' '<< d<< ' '<< e;
return 0;
}
}
cout<< "not found";
return 0;
}
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流