Little Vasya went to the supermarket to get some groceries. He walked about the supermarket for a long time and got a basket full of products. Now he needs to choose the cashier to pay for the products.
There are n cashiers at the exit from the supermarket. At the moment the queue for the i-th cashier already has ki people. The j-th person standing in the queue to the i-th cashier has mi, j items in the basket. Vasya knows that:
- the cashier needs 5 seconds to scan one item;
- after the cashier scans each item of some customer, he needs 15 seconds to take the customer's money and give him the change.
Of course, Vasya wants to select a queue so that he can leave the supermarket as soon as possible. Help him write a program that displays the minimum number of seconds after which Vasya can get to one of the cashiers.
The first line contains integer n (1 ≤ n ≤ 100) — the number of cashes in the shop. The second line contains n space-separated integers: k1, k2, ..., kn (1 ≤ ki ≤ 100), where ki is the number of people in the queue to the i-th cashier.
The i-th of the next n lines contains ki space-separated integers: mi, 1, mi, 2, ..., mi, ki (1 ≤ mi, j ≤ 100) — the number of products thej-th person in the queue for the i-th cash has.
Print a single integer — the minimum number of seconds Vasya needs to get to the cashier.
1 1 1
20
4 1 4 3 2 100 1 2 2 3 1 9 1 7 8
100
In the second test sample, if Vasya goes to the first queue, he gets to the cashier in 100·5 + 15 = 515 seconds. But if he chooses the second queue, he will need 1·5 + 2·5 + 2·5 + 3·5 + 4·15 = 100 seconds. He will need 1·5 + 9·5 + 1·5 + 3·15 = 100 seconds for the third one and 7·5 + 8·5 + 2·15 = 105 seconds for the fourth one. Thus, Vasya gets to the cashier quicker if he chooses the second or the third queue.
正常模拟就好
#include <stdio.h>
#include <string.h>
const int N = 101;
int a[N], num[N], sum[N];
int main()
{
int n, tem;
int minn = 0x3f3f3f;
scanf("%d", &n);
for (int i = 1; i <= n; i++)
{
scanf("%d", &num[i]);
}
memset(sum, 0, sizeof(sum));
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= num[i]; j++)
{
scanf("%d", &tem);
sum[i] += tem;
}
sum[i] = sum[i] * 5 + num[i] * 15;
}
for (int i = 1; i <= n; i++)
minn = minn < sum[i] ? minn : sum[i];
printf("%d\n", minn);
return 0;
}
Once little Vasya read an article in a magazine on how to make beautiful handmade garland from colored paper. Vasya immediately went to the store and bought n colored sheets of paper, the area of each sheet is 1 square meter.
The garland must consist of exactly m pieces of colored paper of arbitrary area, each piece should be of a certain color. To make the garland, Vasya can arbitrarily cut his existing colored sheets into pieces. Vasya is not obliged to use all the sheets to make the garland.
Vasya wants the garland to be as attractive as possible, so he wants to maximize the total area of m pieces of paper in the garland. Calculate what the maximum total area of the pieces of paper in the garland Vasya can get.
The first line contains a non-empty sequence of n (1 ≤ n ≤ 1000) small English letters ("a"..."z"). Each letter means that Vasya has a sheet of paper of the corresponding color.
The second line contains a non-empty sequence of m (1 ≤ m ≤ 1000) small English letters that correspond to the colors of the pieces of paper in the garland that Vasya wants to make.
Print an integer that is the maximum possible total area of the pieces of paper in the garland Vasya wants to get or -1, if it is impossible to make the garland from the sheets he's got. It is guaranteed that the answer is always an integer.
aaabbac aabbccac
6
a z
-1
In the first test sample Vasya can make an garland of area 6: he can use both sheets of color b, three (but not four) sheets of color aand cut a single sheet of color c in three, for example, equal pieces. Vasya can use the resulting pieces to make a garland of area 6.
In the second test sample Vasya cannot make a garland at all — he doesn't have a sheet of color z.
#include <stdio.h>
#include <string.h>
const int N = 1010;
char A[N], B[N];
int An[N], Bn[N];
int main()
{
scanf("%s%s", A, B);
int lena = strlen(A);
int lenb = strlen(B);
memset(An, 0, sizeof(An));
memset(Bn, 0, sizeof(Bn));
for (int i = 0; i < lena; i++)
{
An[ A[i] - 'a']++;
}
for (int i = 0; i < lenb; i++)
{
Bn[ B[i] - 'a']++;
}
int ans = 0;
for (int i = 0; i < 26; i++)
{
if (Bn[i])
{
if (!An[i]) {ans = 0; break;}
if (An[i] <= Bn[i]) ans += An[i];
else ans += Bn[i];
}
}
printf("%d\n", ans == 0 ? -1 : ans);
return 0;
}
#include <stdio.h>
#include <math.h>
const double eps = 1e-6;
double abs(const double& a)
{
return a >= 0 ? a : -a;
}
bool eq(const double& a, const double& b)
{
return abs(a - b) <= eps;
}
int main()
{
int L, R;
double Lx, Ly, Rx, Ry;
scanf("%d%d", &L, &R);
for (int i = 1; i < L; i++)
{
Ly = sqrt(L * L*1.0 - i * i*1.0);
if (Ly == (int)Ly)
{
Rx = 1.0 * R / L * Ly;
if (eq(Rx, (int)Rx))
{
Ry = sqrt(R * R*1.0 - Rx * Rx);
if (Ry == (int)Ry)
{
Lx = (int)sqrt(L * L*1.0 - Ly * Ly);
Ry = (int)sqrt(R * R*1.0 - Rx * Rx);
if (eq(Ly,Ry)) continue;
printf("YES\n0 0\n");
printf("-%.0lf %0.lf\n%.0lf %.0lf\n", Lx, Ly, Rx, Ry);
return 0;
}
}
}
}
printf("NO\n");
}