Codeforces Round #429

Table of Contents A. Generous KefaB. GodsendC. Leha and Function

A. Generous Kefa

One day Kefa found n baloons. For convenience, we denote color of i-th baloon as s**i — lowercase letter of the Latin alphabet. Also Kefa has k friends. Friend will be upset, If he get two baloons of the same color. Kefa want to give out all baloons to his friends. Help Kefa to find out, can he give out all his baloons, such that no one of his friens will be upset — print «YES», if he can, and «NO», otherwise. Note, that Kefa's friend will not upset, if he doesn't get baloons at all.

Input

The first line contains two integers n and k (1 ≤ n, k ≤ 100) — the number of baloons and friends.

Next line contains string s — colors of baloons.

Output

Answer to the task — «YES» or «NO» in a single line.

You can choose the case (lower or upper) for each letter arbitrary.

Examples

input

4 2
aabb

output

YES

input

6 3
aacaab

output

NO

Note

In the first sample Kefa can give 1-st and 3-rd baloon to the first friend, and 2-nd and 4-th to the second.

In the second sample Kefa needs to give to all his friends baloons of color a, but one baloon will stay, thats why answer is «NO».

题意:将气球全部发给一些人,每个人不能收到相同颜色的气球,是否可以将气球全部发出去。

#include <bits/stdc++.h>

using namespace std;

char str[105];
int num[30];

int main(int argc, char const *argv[])
{
	int n,k;
	scanf("%d%d",&n,&k);
	scanf("%s",str);

	for(int i=0;i<n;i++)
		num[str[i]-'a']++;
    bool flag = true;
	for(int i=0;i <26;i++) {
		if(num[i]>k) {
            flag = false;
            break;
		}

	}

	if(flag)
		puts("YES");
	else puts("NO");

	return 0;
}

B. Godsend

Leha somehow found an array consisting of n integers. Looking at it, he came up with a task. Two players play the game on the array. Players move one by one. The first player can choose for his move a subsegment of non-zero length with an odd sum of numbers and remove it from the array, after that the remaining parts are glued together into one array and the game continues. The second player can choose a subsegment of non-zero length with an even sum and remove it. Loses the one who can not make a move. Who will win if both play optimally?

Input

First line of input data contains single integer n (1 ≤ n ≤ 106) — length of the array.

Next line contains n integers a1, a2, ..., an (0 ≤ ai ≤ 109).

Output

Output answer in single line. "First", if first player wins, and "Second" otherwise (without quotes).

Examples

input

4
1 3 2 3

output

First

input

2
2 2

output

Second

Note

In first sample first player remove whole array in one move and win.

In second sample first player can't make a move and lose.

题意:博弈,给一个数列,第一个人先手,每次选取一个奇数区间拿走,第二个后手,每次选取一个偶数区间拿走,谁不能动,谁输。

分析:数据量很大,而且不能区间求和,说明这和奇偶相关。

当整个区间为奇数时,先手全部拿走。

当整个区间有奇数个奇数(先手全部拿走)。

当整个区间有偶数个奇数(先手拿的只剩下一个奇数。后手却只能拿不走那个奇数,先手第二次全部拿走)

#include <bits/stdc++.h>

using namespace std;

const int maxn = 1e6+5;
int a[maxn];

int main(int argc, char const *argv[])
{
	int n;
	cin>>n;

    long long sum = 0;
    int u;
    int cnt1,cnt2;
    cnt1 = cnt2 = 0;
    for(int i=0; i < n; i++) {
        scanf("%d",&u);
        a[i] = u%2;
        sum+=a[i];

        if(a[i]%2) cnt1++;
        else cnt2++;
    }

    if(sum%2)
        puts("First");
    else {
        if(cnt1>0)
            puts("First");
        else puts("Second");
    }
	return 0;
}

C. Leha and Function

Leha like all kinds of strange things. Recently he liked the function F(n, k). Consider all possible k-element subsets of the set [1, 2, ..., n]. For subset find minimal element in it. F(n, k) — mathematical expectation of the minimal element among all k-element subsets.

But only function does not interest him. He wants to do interesting things with it. Mom brought him two arrays A and B, each consists of m integers. For all i, j such that 1 ≤ i, j ≤ m the condition Ai ≥ Bj holds. Help Leha rearrange the numbers in the array A so that the sum is maximally possible, where A' is already rearranged array.

Input

First line of input data contains single integer m (1 ≤ m ≤ 2·105) — length of arrays A and B.

Next line contains m integers a1, a2, ..., am (1 ≤ ai ≤ 109) — array A.

Next line contains m integers b1, b2, ..., bm (1 ≤ bi ≤ 109) — array B.

Output

Output m integers a'1, a'2, ..., a'm — array A' which is permutation of the array A.

Examples

input

5
7 3 5 3 4
2 1 3 2 3

output

4 7 3 5 3

input

7
4 6 5 8 8 2 6
2 1 2 2 1 1 2

output

2 6 4 5 8 8 6

题意:

F(n,k) 函数,从 1~n 个数中,挑取 k 个数,然后取这个集合中最小的值,F(n,k),就是这个最小值的期望。

推导,F(n,k)=frac{n+1}{k+1} 没仔细去推。

然后,sum_{i=1}^mF(A_i',B_i) 最大时,A数组重排。

贪心,A中最大的元素匹配B中最小的元素。

#include <bits/stdc++.h>

using namespace std;
const int maxn = 200005;

struct node {
    int x;
    int id;
}a[maxn],b[maxn];


bool cmp(node a,node b) {
    return a.x < b.x;
}

bool cmp2(node a,node b) {
    return a.x > b.x;
}

bool cmp3(node a,node b) {
    return a.id < b.id;
}

int main() {

    int m;
    scanf("%d",&m);
    for(int i=0; i < m; i++) {
        scanf("%d",&a[i].x);
        a[i].id = i;
    }

    for(int i=0; i < m; i++) {
        scanf("%d",&b[i].x);
        b[i].id = i;
    }

    sort(a,a+m,cmp2);
    sort(b,b+m,cmp);

    for(int i=0; i < m; i++)
        a[i].id = b[i].id;

    sort(a,a+m,cmp3);
    for(int i=0; i < m; i++)
        printf("%d ",a[i].x);

    return 0;
}
原文地址:https://www.cnblogs.com/TreeDream/p/7418737.html