链接:https://www.nowcoder.com/acm/contest/203/D
来源:牛客网
Shopping
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 524288K,其他语言1048576K
64bit IO Format: %lld
空间限制:C/C++ 524288K,其他语言1048576K
64bit IO Format: %lld
题目描述
你要买n件物品,其中有一些是凳子。
商场正在举行促销活动,如果购物车中有至少一个凳子,那么你可以半价购买这个购物车中最贵的一个物品。
你有m辆购物车,请最小化你的花费。
商场正在举行促销活动,如果购物车中有至少一个凳子,那么你可以半价购买这个购物车中最贵的一个物品。
你有m辆购物车,请最小化你的花费。
输入描述:
第一行一个整数t表示数据组数 (1 ≤ t ≤ 100)。i
每组数据第一行两个整数n,m (1 ≤ n,m ≤ 1000),接下来n行每行两个整数a
,bi
,分别表示第i件物品的价格以及它是否是凳子 (1 ≤ ai
≤ 105
, 0 ≤ bi
≤ 1)。
输出描述:
每组数据输出一行一个实数表示最小花费,保留一位小数。
示例1
输出
复制12.5 10.5
1 #include<bits/stdc++.h> 2 using namespace std; 3 double a[1100],b[1100]; 4 int main() 5 { 6 int t; 7 scanf("%d",&t); 8 while(t--) 9 { 10 int n,m; 11 scanf("%d%d",&n,&m); 12 for(int i=0;i<n;i++) 13 { 14 scanf("%lf%lf",&a[i],&b[i]); 15 } 16 sort(a,a+n); 17 int sum=0; 18 for(int i=0;i<n;i++) 19 { 20 if(b[i]==1) 21 { 22 sum++; 23 } 24 } 25 if(sum<=m) 26 { 27 for(int i=n-1;i>=n-sum;i--) 28 { 29 a[i]/=2; 30 } 31 } 32 else 33 { 34 for(int i=n-1;i>=n-m;i--) 35 { 36 a[i]/=2; 37 } 38 } 39 double ans=0; 40 for(int i=0;i<n;i++) 41 { 42 // cout<<a[i]<<" "; 43 ans+=a[i]; 44 } 45 printf("%.1f ",ans); 46 } 47 return 0; 48 }
链接:https://www.nowcoder.com/acm/contest/203/H
来源:牛客网
Travel
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 524288K,其他语言1048576K
64bit IO Format: %lld
空间限制:C/C++ 524288K,其他语言1048576K
64bit IO Format: %lld
题目描述
魔方国有n座城市,编号为
。城市之间通过n-1条无向道路连接,形成一个树形结构。
澜澜打算在魔方国进行m次旅游,每次游览至少一座城市。为了方便,每次旅游游览的城市必须是连通的。此外,澜澜希望游览所有城市恰好一次。
澜澜想知道有多少种旅游方案满足条件,两个方案不同当且仅当存在某一次旅游游览了不同的城市。
澜澜不会数数,所以只好让你来帮他数方案。
澜澜打算在魔方国进行m次旅游,每次游览至少一座城市。为了方便,每次旅游游览的城市必须是连通的。此外,澜澜希望游览所有城市恰好一次。
澜澜想知道有多少种旅游方案满足条件,两个方案不同当且仅当存在某一次旅游游览了不同的城市。
澜澜不会数数,所以只好让你来帮他数方案。
输入描述:
第一行一个整数t表示数据组数 (1 ≤ t ≤ 100)。
每组数据第一行两个整数n,m
,接下来n-1行每行两个整数ai
,bi
表示一条道路 (1≤ ai
,bi
≤ n)。
输出描述:
每组数据输出一行一个整数表示方案数对109
+7取模的结果。
示例1
输出
复制1 4
思路:组合数C(n-1,m-1)*m!
代码:
1 #include<bits/stdc++.h> 2 using namespace std; 3 typedef long long ll; 4 const int maxn = 1 << 20; 5 const int mod = 1000000007; 6 int t, n, m, ta, tb; 7 ll c[maxn]; 8 ll qq(ll a, ll b, ll c) 9 { 10 ll ans = 1; 11 a = a % c; 12 while (b>0) 13 { 14 if (b % 2 == 1) 15 ans = (ans * a) % c; 16 b = b / 2; 17 a = (a * a) % c; 18 } 19 return ans; 20 } 21 22 ll C(ll n, ll m) 23 { 24 return c[n] * qq(c[m] * c[n - m] % mod, mod - 2, mod) % mod; 25 } 26 int main(void) 27 { 28 scanf("%d", &t); 29 c[1] = 1; 30 for (int i = 2; i <= maxn; i++) 31 { 32 c[i] = c[i - 1] * i%mod; 33 } 34 while (t--) 35 { 36 scanf("%d%d", &n, &m); 37 for (int i = 0; i < n - 1; i++) 38 scanf("%d%d",&ta,&tb); 39 if (m == 1) 40 { 41 printf("1 "); 42 continue; 43 } 44 ll ans = C(n - 1, m - 1); 45 ans = (ans*c[m]) % mod; 46 cout << ans << endl; 47 } 48 return 0; 49 }