812C - Sagheer and Nubian Market

Sagheer and Nubian Market

二分+排序

比赛时没对,赛后检查才发现check()里的参数类型是int 改成ll就对了。好气哦!

 1 #include <bits/stdc++.h>
 2 #define ll long long
 3 using namespace std;
 4 const int N = 1e5+10;
 5 ll a[N], b[N], k, t, n, l, r, s, ans;
 6
 7 bool check(ll x ){
 8     for(int i =1; i <=n ; i ++){
 9         b[i] = a[i]+i*x;
10     }
11     sort(b+1,b+n+1);
12     ans=0;
13     for(int i = 1; i <=x; i ++){
14         ans+=b[i];
15     }
16     if(ans>s)return false;
17     else return true;
18 }
19
20 int main(){
21     cin >> n >> s;
22     for(int i = 1; i <= n; i ++)scanf("%lld",&a[i]);
23     l = 1, r = n;
24     while(l<=r){
25         ll mid = (l+r)/2;
26         if(check(mid)){
27             k = mid;
28             t = ans;
29             l = mid+1;
30         }else{
31             r = mid-1;
32         }
33     }
34     cout << k << " " << t << endl;
35     return 0;
36 }
时间: 2024-11-06 07:34:03

812C - Sagheer and Nubian Market的相关文章

Codeforces Round #417 (Div. 2) C. Sagheer and Nubian Market 二分答案 +排序

Codeforces Round #417 (Div. 2) C. Sagheer and Nubian Market 二分答案 +排序 题意 有 a[ i ] 个数 要求选最多的数 使其和不超过 S ,且在此情况下,和最小选最多数情况下 和最小 且 每个数有加成 如果选了 k个数 那么加成后 就是 a[ i ] + k*i ; 题解 二分mid 表示选了个数 加成一下,将加成以后结果排序一下 , 若前 mid数 和大于 s 则此方案不可行 PS 要用 long long ..... 还有 co

Round #417 C. Sagheer and Nubian Market(Div.2)

On his trip to Luxor and Aswan, Sagheer went to a Nubian market to buy some souvenirs for his friends and relatives. The market has some strange rules. It contains n different items numbered from 1 to n. The i-th item has base cost ai Egyptian pounds

#417 Div2 Problem C Sagheer and Nubian Market (二分 &amp;&amp; std::accumulate)

题意 : 给你 n 件物品和你拥有的钱 S, 接下来给出这 n 件物品的价格, 这些物品的价值不是固定不变的, 价格的变化公式是 a[i]+k*i (i代表第 i 件物品, k 代表你选择买的物品数量, a[i]为物品的底价), 现问你最多能够买多少件物品和所买物品总和, 输出时应该使得所买物品总和尽量小 分析 : 如果我当前能买 k 件物品, 那我肯定能买数量小于 k 的物品, 如果我当前买不起 k 件物品, 那我肯定也不能买比 k 件要多的物品.所以可以考虑二分解法, 在1~n之间二分查找

#417(div2) C. Sagheer and Nubian Market

题意:给出n件商品价格和一个最大限额S,购买时商品的价格变为axj?+?xj·k,xj是下标索引,k是购买数量,求最多能买几件和花费. 思路:二分+排序 1 #include<bits/stdc++.h> 2 using namespace std; 3 typedef long long ll; 4 5 ll a[100005]; 6 ll b[100005]; 7 ll n,s; 8 ll sum; 9 ll check(ll x){ 10 sum=0; 11 for(int i=1;i&

CF812C Sagheer and Nubian Market 二分+贪心

模拟赛给他们出T1好了~ code: #include <bits/stdc++.h> #define ll long long #define N 100006 #define setIO(s) freopen(s".in","r",stdin) using namespace std; int n; ll a[N],ck,A[N],S; int check(int tmp) { int i,cnt=0; for(i=1;i<=n;++i) A[

codefoces812C-Sagheer and Nubian Market心得

题目描述: On his trip to Luxor and Aswan, Sagheer went to a Nubian market to buy some souvenirs for his friends and relatives. The market has some strange rules. It contains n different items numbered from 1 to n. The i-th item has base cost ai Egyptian

LYDSY模拟赛day2 Market

/* orz claris,这个题的解法非常巧妙,首先是时间问题,其实这个问题只要离线处理一下就可以了,把物品和询问都按照时间排序,然后看一下能不能满足.然后,因为容量<=10^9,显然是不可能开一个这么大的数组,而且这么大一个容量,价值又很小,我们可以考虑用二分解决 对每个询问二分答案,需要判定用容量为 M 的背包是否可 以装下 mid 的价值. 设 fi 表示装了 i 价值所需的最小容量,gi 表示 min(fi,fi+1,fi+2,……). 那么只需要检查 gmid 是否不超过 M 即可.

ZOJ 3910 Market ZOJ Monthly, October 2015 - H

Market Time Limit: 2 Seconds      Memory Limit: 65536 KB There's a fruit market in Byteland. The salesmen there only sell apples. There are n salesmen in the fruit market and the i-th salesman will sell at most wi apples. Every salesman has an immedi

Android Market google play store帐号注册方法流程 及发布应用注意事项【转载】

[转载]http://www.cnblogs.com/zdz8207/archive/2012/07/09/google-play-store-registered.html Android Market google play store帐号注册方法流程 及发布应用注意事项 Android Market google play store帐号申请 注册方法流程 在 Google Play 中发布软件之前,您需要完成以下三项工作: 创建开发人员个人资料 接受开发人员分发协议 通过信用卡支付注册费