NC16861. [NOI2000]瓷片项链
描述
原始部落用一种稀有的泥土烧制直径相同的圆瓷片并串成项链,串的时候沿瓷片的直径方向顺次连接,瓷片之间没有空隙也不重叠,一条项链至少由一个瓷片构成。
下图示出四片同样大小的瓷片串接所成的项链,其总长为单个瓷片直径的四倍。
每个烧制的瓷片厚度是一定的,直径D和所用泥土的体积V有以下关系:
其中V0为烧制每一片的损耗,单位与V相同。当用料小于等于V0时,不能烧制成瓷片。
例: V总 = 10,V0 = 1,若烧制成一片瓷片,V = V总= 10,D = 0.9。如果把泥土均分成2份,每份泥土的体积为V = V总/2 = 5,单个瓷片的直径为,串起来的总长为1.2。
给定了泥土的总体积和烧制单个瓷片的损耗,烧制的瓷片数不同,能够得到的项链总长度也不相同,请计算烧制多少个瓷片能使所得到的项链最长。
输入描述
仅有两行,每一行仅包含一个整数和一个换行/回车符。第一行的数字为泥土总体积V总 (0<V总<60000),第二行为烧制单个瓷片的损耗V0(0< V0<600)。
输出描述
仅包含一个数字和一个换行/回车符。该数字为能获得最长项链而烧制的瓷片数。如果不能烧制成瓷片或者最优解不唯一(存在两个或者两个以上方案均能获得最长项链),输出数字0。
示例1
输入:
10 1
输出:
5
示例2
输入:
10 2
输出:
0
C++14(g++5.4) 解法, 执行用时: 5ms, 内存消耗: 480K, 提交时间: 2019-08-05 09:31:48
#include<bits/stdc++.h> typedef long long ll; using namespace std; int main() { ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); int vz,v; int x; int a; double b; cin>>vz>>v; b=(vz*1.0)/(2.*v); a=(int)b; if(a<1||b-a==0.5) cout<<0<<'\n'; else if((ceil(b)-a)>(floor(b)-a)) cout<<floor(b)<<'\n'; else cout<<ceil(b)<<'\n'; return 0; }
C++(clang++ 11.0.1) 解法, 执行用时: 3ms, 内存消耗: 472K, 提交时间: 2022-10-15 17:43:30
#include<bits/stdc++.h> using namespace std; int Vt,V0,ans; double x,dx; int main(){ scanf("%d%d",&Vt,&V0); dx=floor(x=(double)Vt/V0/2); if(x-dx==0.5) ans=0; else ans=dx; printf("%d\n",ans); }