mfcheer

Codeforces Round

版权声明:转载请注明出处。 https://blog.csdn.net/u014427196/article/details/41673007

http://codeforces.com/contest/492

A 水题

A. Vanya and Cubes

time limit per test

1 second

memory limit per test

256 megabytes

input

standard input

output

standard output

Vanya got n cubes. He decided to build a pyramid from them. Vanya wants to build the pyramid as follows: the top level of the pyramid must consist of 1 cube, the second level must consist of 1 + 2 = 3 cubes, the third level must have 1 + 2 + 3 = 6 cubes, and so on. Thus, the i -th level of the pyramid must have 1 + 2 + ... + ( i - 1) + i cubes.

Vanya wants to know what is the maximum height of the pyramid that he can make using the given cubes.

Input

The first line contains integer n ( 1 ≤ n ≤ 10 4 ) — the number of cubes given to Vanya.

Output

Print the maximum possible height of the pyramid in the single line.

Sample test(s)

input

1

output

1

input

25

output

4

Note

Illustration to the second sample:

#include <iostream>
#include <algorithm>
#include <iterator>
#include <deque>
#include <vector>
#include <unordered_set>
#include <unordered_map>
#include <set>
#include <valarray>
#include <list>
#include <stack>
#include <array>
#include <iomanip>
#include <map>
#include <string.h>
#include <queue>
#include <sstream>
#include <iomanip>
#include <fstream>
#include <stdio.h>

using namespace std;

int n,m;

int a[1000];

int main ()
{
    a[1] = 1;
    for(int i=1;i<=999;i++)
        a[i] = a[i-1]+i;
    while (cin>>n)
    {
        int i =1;
        int ans = 0;
        while (n-a[i] >=0)
        {
            n-=a[i];
            i++;
            ans++;
        }
        cout<<ans<<endl;
    }
    return 0;
}

B 简单贪心

B. Vanya and Lanterns

time limit per test

1 second

memory limit per test

256 megabytes

input

standard input

output

standard output

Vanya walks late at night along a straight street of length l , lit by n lanterns. Consider the coordinate system with the beginning of the street corresponding to the point 0 , and its end corresponding to the point l . Then the i -th lantern is at the point a i . The lantern lights all points of the street that are at the distance of at most d from it, where d is some positive number, common for all lanterns.

Vanya wonders: what is the minimum light radius d should the lanterns have to light the whole street?

Input

The first line contains two integers n , l ( 1 ≤ n ≤ 1000 , 1 ≤ l ≤ 10 9 ) — the number of lanterns and the length of the street respectively.

The next line contains n integers a i ( 0 ≤ a i ≤ l ). Multiple lanterns can be located at the same point. The lanterns may be located at the ends of the street.

Output

Print the minimum light radius d , needed to light the whole street. The answer will be considered correct if its absolute or relative error doesn't exceed 10 - 9 .

Sample test(s)

input

7 15
15 5 3 7 9 14 0

output

2.5000000000

input

2 5
2 5

output

2.0000000000

Note

Consider the second sample. At d = 2 the first lantern will light the segment [0, 4] of the street, and the second lantern will light segment [3, 5] . Thus, the whole street will be lit.

#include <iostream>
#include <algorithm>
#include <iterator>
#include <deque>
#include <vector>
#include <unordered_set>
#include <unordered_map>
#include <set>
#include <valarray>
#include <list>
#include <stack>
#include <array>
#include <iomanip>
#include <map>
#include <string.h>
#include <queue>
#include <sstream>
#include <iomanip>
#include <fstream>
#include <stdio.h>

using namespace std;

int n,l;
double a[1010];

int main ()
{
    while (cin>>n>>l)
    {
          for(int i=1;i<=n;i++)
                cin>>a[i];
          sort(a+1,a+1+n);

          double ans = a[1] ;

          for(int i=1;i<=n-1;i++)
          {
              ans = max (ans,(a[i+1]-a[i])*1.0/2);
          }

          ans = max(ans,l-a[n]);

          printf("%.10lf\n",ans);
    }
    return 0;
}

C 按照bi升序排列 注意不要超时即可

C. Vanya and Exams

time limit per test

1 second

memory limit per test

256 megabytes

input

standard input

output

standard output

Vanya wants to pass n exams and get the academic scholarship. He will get the scholarship if the average grade mark for all the exams is at least avg . The exam grade cannot exceed r . Vanya has passed the exams and got grade a i for the i -th exam. To increase the grade for the i -th exam by 1 point, Vanya must write b i essays. He can raise the exam grade multiple times.

What is the minimum number of essays that Vanya needs to write to get scholarship?

Input

The first line contains three integers n , r , avg ( 1 ≤ n ≤ 10 5 , 1 ≤ r ≤ 10 9 , 1 ≤ avg ≤ min ( r , 10 6 ) ) — the number of exams, the maximum grade and the required grade point average, respectively.

Each of the following n lines contains space-separated integers a i and b i ( 1 ≤ a i ≤ r , 1 ≤ b i ≤ 10 6 ).

Output

In the first line print the minimum number of essays.

Sample test(s)

input

5 5 4
5 2
4 7
3 1
3 2
2 5

output

4

input

2 5 4
5 2
5 2

output

0

Note

In the first sample Vanya can write 2 essays for the 3rd exam to raise his grade by 2 points and 2 essays for the 4th exam to raise his grade by 1 point.

In the second sample, Vanya doesn't need to write any essays as his general point average already is above average.

#include <iostream>
#include <algorithm>
#include <iterator>
#include <deque>
#include <vector>
#include <unordered_set>
#include <unordered_map>
#include <set>
#include <valarray>
#include <list>
#include <stack>
#include <array>
#include <iomanip>
#include <map>
#include <string.h>
#include <queue>
#include <sstream>
#include <iomanip>
#include <fstream>
#include <stdio.h>

using namespace std;

int n;
long long r;
long long avg,AVE;

struct q
{
    int a;
    int b;
}p[100010];

bool cmp(q aa,q bb)
{
    return aa.b < bb.b;
}

int main ()
{
    while (cin>>n>>r>>avg)
    {
        AVE= 0;
        for(int i=1;i<=n;i++)
        {
            cin>>p[i].a>>p[i].b;
            AVE+=p[i].a;
        }

        if (AVE >= avg*n)
        {
            cout<<0<<endl;
            return 0;
        }

        sort(p+1,p+1+n,cmp);

        long long  ans = 0;

        int i = 1;
        while ( AVE < avg*n )
        {
            ans += p[i].b * min ( r -p[i].a,n*avg - AVE );
            
            AVE += min(r -p[i].a,n*avg - AVE);

            i++;
        }

        cout<<ans<<endl;
                    
    }

    return 0;
}
← 全部文章

留言