首页 > 代码库 > 2017-5-22-Train:Educational Codeforces Round 2

2017-5-22-Train:Educational Codeforces Round 2

B. Queries about less or equal elements(二分)

You are given two arrays of integers a and b. For each element of the second array b**j you should find the number of elements in array athat are less than or equal to the value b**j.

Input

The first line contains two integers n, m (1 ≤ n, m ≤ 2·105) — the sizes of arrays a and b.

The second line contains n integers — the elements of array a ( - 109 ≤ a**i ≤ 109).

The third line contains m integers — the elements of array b ( - 109 ≤ b**j ≤ 109).

Output

Print m integers, separated by spaces: the j-th of which is equal to the number of such elements in array a that are less than or equal to the value b**j.

Examples

input

5 41 3 5 7 96 4 2 8

output

3 2 1 4

input

5 51 2 1 2 53 1 4 1 5

output

4 2 4 2 5

Means:

在A数组中找到小于等于b[i]的个数

Solve:

直接二分美滋滋

Code:

技术分享
 1 #pragma comment(linker, "/STACK:36777216") 2  3 #include <bits/stdc++.h> 4 using namespace std; 5 #define LSON            id << 1 , l , mid 6 #define RSON            id << 1 | 1 , mid + 1 , r 7 #define ROOT            1 , 1 , n 8 #define CLR(x , y)      memset(x , y , sizeof(x)) 9 #define LOWBIT(x)       x & (-x)10 #define FORN(i , a , n)  for(int i = (a) ; i <= (n) ; ++i)11 #define FORP(i , n , a)  for(int i = (n) ; i >= (a) ; --i)12 #define CASE(x)        printf("Case %d: ", x)13 #define SFD(x)      scanf("%lf" , &x)14 #define SFC(x)      scanf(" %c" , &x)15 #define SFS(x)      scanf(" %s" , x)16 #define SFI(x)      scanf("%d" , &x)17 #define SFI64(x)    scanf("%I64d" , &x)18 #define PFF(x)         printf("%f" , x)19 #define PFD(x)         printf("%lf" , x)20 #define PFI(x)         printf("%d" , x)21 #define PFC(x)         printf("%c" , x)22 #define PFS(x)         printf("%s" , x)23 #define PFI64(x)       printf("%I64d" , x)24 #define SPACE          printf(" ")25 #define PUT            puts("")26 #define LPUP(i , j , k) for(int i = j ; i <= k ; ++i)27 #define LPDW(i , j , k) for(int i = j ; i >= k ; --i)28 #define PB(x)          push_back(x)29 #define ALL(A)         A.begin(), A.end()30 #define SZ(A)          int((A).size())31 #define LBD(A, x)      (lower_bound(ALL(A), x) - A.begin())32 #define UBD(A, x)      (upper_bound(ALL(A), x) - A.begin())33 #define LOCAL34 static const double PI = acos(-1.0);35 static const double EPS = 1e-8;36 static const int INF = 0X3fffffff;37 typedef long long LL;38 typedef double DB;39 int read()40 {41     int x = 0;42     int f = 1 ; char ch = getchar();43     while (ch < 0 || ch > 9) {if (ch == -) f = -1; ch = getchar();}44     while (ch >= 0 && ch <= 9) {x = x * 10 + ch - 0; ch = getchar();}45     x *= f;46     return x;47 }48 49 inline void write(int x)50 {51     int y = 10 , len = 1;52     while(y <= x)53     {54         y *= 10;55         ++len;56     }57     while(len--)58     {59         y /= 10;60         putchar(x / y + 48);61         x %= y;62     }63 }64 65 /************************Little Pea****************************/66 67 static const int MAXN = 2e5 + 10;68 int a[MAXN];69 int n , m;70 int main()71 {72 #ifndef ONLINE_JUDGE73     freopen("D:\\系统优化\\Desktop\\littlepea\\in.data" , "r" , stdin);74 #endif75     scanf("%d%d" , &n , &m);76     for(int i = 1 ; i <= n ; ++i)77     {78         scanf("%d" , a + i);79     }80 81     sort(a + 1 , a + 1 + n);82 83     while(m--)84     {85         int x;86         scanf("%d" , &x);87 88         printf("%d " , upper_bound(a + 1 , a + 1 + n , x) - a - 1);89 90 91     }92 93 #ifndef ONLINE_JUDGE94     fclose(stdin), fclose(stdout);95 #endif96 }
View Code

C. Make Palindrome(贪心 + 模拟)

A string is called palindrome if it reads the same from left to right and from right to left. For example "kazak", "oo", "r" and "mikhailrubinchikkihcniburliahkim" are palindroms, but strings "abb" and "ij" are not.

You are given string s consisting of lowercase Latin letters. At once you can choose any position in the string and change letter in that position to any other lowercase letter. So after each changing the length of the string doesn‘t change. At first you can change some letters in s. Then you can permute the order of letters as you want. Permutation doesn‘t count as changes.

You should obtain palindrome with the minimal number of changes. If there are several ways to do that you should get the lexicographically (alphabetically) smallest palindrome. So firstly you should minimize the number of changes and then minimize the palindrome lexicographically.

Input

The only line contains string s (1 ≤ |s| ≤ 2·105) consisting of only lowercase Latin letters.

Output

Print the lexicographically smallest palindrome that can be obtained with the minimal number of changes.

Examples

input

aabc

output

abba

input

aabcd

output

abcba

Means:

给出字符串s,通过调整顺序或修改字符使字符串回文,输出修改次数最小且字典序最小的回文字符串。

Solve:

统计一下字母次数,字母序后的出现次数奇数的改成字母序小的,然后贪心选能使用的最小字符构建回文字符串即可

Code:

技术分享
  1 #pragma comment(linker, "/STACK:36777216")  2   3 #include <bits/stdc++.h>  4 using namespace std;  5 #define LSON            id << 1 , l , mid  6 #define RSON            id << 1 | 1 , mid + 1 , r  7 #define ROOT            1 , 1 , n  8 #define CLR(x , y)      memset(x , y , sizeof(x))  9 #define LOWBIT(x)       x & (-x) 10 #define FORN(i , a , n)  for(int i = (a) ; i <= (n) ; ++i) 11 #define FORP(i , n , a)  for(int i = (n) ; i >= (a) ; --i) 12 #define CASE(x)        printf("Case %d: ", x) 13 #define SFD(x)      scanf("%lf" , &x) 14 #define SFC(x)      scanf(" %c" , &x) 15 #define SFS(x)      scanf(" %s" , x) 16 #define SFI(x)      scanf("%d" , &x) 17 #define SFI64(x)    scanf("%I64d" , &x) 18 #define PFF(x)         printf("%f" , x) 19 #define PFD(x)         printf("%lf" , x) 20 #define PFI(x)         printf("%d" , x) 21 #define PFC(x)         printf("%c" , x) 22 #define PFS(x)         printf("%s" , x) 23 #define PFI64(x)       printf("%I64d" , x) 24 #define SPACE          printf(" ") 25 #define PUT            puts("") 26 #define LPUP(i , j , k) for(int i = j ; i <= k ; ++i) 27 #define LPDW(i , j , k) for(int i = j ; i >= k ; --i) 28 #define PB(x)          push_back(x) 29 #define ALL(A)         A.begin(), A.end() 30 #define SZ(A)          int((A).size()) 31 #define LBD(A, x)      (lower_bound(ALL(A), x) - A.begin()) 32 #define UBD(A, x)      (upper_bound(ALL(A), x) - A.begin()) 33 #define LOCAL 34 static const double PI = acos(-1.0); 35 static const double EPS = 1e-8; 36 static const int INF = 0X3fffffff; 37 typedef long long LL; 38 typedef double DB; 39 int read() 40 { 41     int x = 0; 42     int f = 1 ; char ch = getchar(); 43     while (ch < 0 || ch > 9) {if (ch == -) f = -1; ch = getchar();} 44     while (ch >= 0 && ch <= 9) {x = x * 10 + ch - 0; ch = getchar();} 45     x *= f; 46     return x; 47 } 48  49 inline void write(int x) 50 { 51     int y = 10 , len = 1; 52     while(y <= x) 53     { 54         y *= 10; 55         ++len; 56     } 57     while(len--) 58     { 59         y /= 10; 60         putchar(x / y + 48); 61         x %= y; 62     } 63 } 64  65 /************************Little Pea****************************/ 66  67 static const int MAXN = 2e5 + 10; 68 char data[MAXN]; 69 int num[30]; 70 int n , m; 71 int main() 72 { 73 #ifndef ONLINE_JUDGE 74     freopen("D:\\系统优化\\Desktop\\littlepea\\in.data" , "r" , stdin); 75 #endif 76     scanf(" %s" , data); 77     int len = strlen(data); 78     int x = 25 , pos = 0; 79     for(int i = 0 ; i < len ; ++i) 80         ++num[data[i] - a]; 81     for(int i = 0 ; i < 26 ; ++i) 82     { 83         if(num[i] & 1) 84         { 85             while(num[x] % 2 == 0 && i < x) 86                 --x; 87             if(i == x) 88                 --num[i] , data[len / 2] = i + a; 89             else 90                 --num[x] , ++num[i]; 91         } 92  93         for(int j = 0 ; j < num[i] / 2 ; ++j) 94             data[pos] = i + a , data[len - pos - 1] = i + a , ++pos; 95     } 96  97     printf("%s" , data); 98  99 100 #ifndef ONLINE_JUDGE101     fclose(stdin), fclose(stdout);102 #endif103 }
View Code

D. Area of Two Circles‘ Intersection(圆的公共面积)

You are given two circles. Find the area of their intersection.

Input

The first line contains three integers x1, y1, r1 ( - 109 ≤ x1, y1 ≤ 109, 1 ≤ r1 ≤ 109) — the position of the center and the radius of the first circle.

The second line contains three integers x2, y2, r2 ( - 109 ≤ x2, y2 ≤ 109, 1 ≤ r2 ≤ 109) — the position of the center and the radius of the second circle.

Output

Print the area of the intersection of the circles. The answer will be considered correct if the absolute or relative error doesn‘t exceed10 - 6.

Examples

input

0 0 46 0 4

output

7.25298806364175601379

input

0 0 511 0 5

output

0.00000000000000000000

 技术分享

Code:

技术分享
 1 #pragma comment(linker, "/STACK:36777216") 2  3 #include <bits/stdc++.h> 4 using namespace std; 5 #define LSON            id << 1 , l , mid 6 #define RSON            id << 1 | 1 , mid + 1 , r 7 #define ROOT            1 , 1 , n 8 #define CLR(x , y)      memset(x , y , sizeof(x)) 9 #define LOWBIT(x)       x & (-x)10 #define FORN(i , a , n)  for(int i = (a) ; i <= (n) ; ++i)11 #define FORP(i , n , a)  for(int i = (n) ; i >= (a) ; --i)12 #define CASE(x)        printf("Case %d: ", x)13 #define SFD(x)      scanf("%lf" , &x)14 #define SFC(x)      scanf(" %c" , &x)15 #define SFS(x)      scanf(" %s" , x)16 #define SFI(x)      scanf("%d" , &x)17 #define SFI64(x)    scanf("%I64d" , &x)18 #define PFF(x)         printf("%f" , x)19 #define PFD(x)         printf("%lf" , x)20 #define PFI(x)         printf("%d" , x)21 #define PFC(x)         printf("%c" , x)22 #define PFS(x)         printf("%s" , x)23 #define PFI64(x)       printf("%I64d" , x)24 #define SPACE          printf(" ")25 #define PUT            puts("")26 #define LPUP(i , j , k) for(int i = j ; i <= k ; ++i)27 #define LPDW(i , j , k) for(int i = j ; i >= k ; --i)28 #define PB(x)          push_back(x)29 #define ALL(A)         A.begin(), A.end()30 #define SZ(A)          int((A).size())31 #define LBD(A, x)      (lower_bound(ALL(A), x) - A.begin())32 #define UBD(A, x)      (upper_bound(ALL(A), x) - A.begin())33 #define LOCAL34 static const double PI = acosl(-1);35 static const double EPS = 1e-5;36 static const int INF = 0X3fffffff;37 typedef long long LL;38 typedef double DB;39 int read()40 {41     int x = 0;42     int f = 1 ; char ch = getchar();43     while (ch < 0 || ch > 9) {if (ch == -) f = -1; ch = getchar();}44     while (ch >= 0 && ch <= 9) {x = x * 10 + ch - 0; ch = getchar();}45     x *= f;46     return x;47 }48 49 inline void write(int x)50 {51     int y = 10 , len = 1;52     while(y <= x)53     {54         y *= 10;55         ++len;56     }57     while(len--)58     {59         y /= 10;60         putchar(x / y + 48);61         x %= y;62     }63 }64 65 /************************Little Pea****************************/66 67 typedef long double LD;68 static const int MAXN = 2e5 + 10;69 int x1 , y1 , r1 , x2 , y2 , r2;70 inline LL Pow(LL x)71 {72     return x * x;73 }74 double Cal()75 {76     double ans = 0;77     LL dis = Pow(x1 - x2) + Pow(y1 - y2);78     if(dis >= Pow(r1 + r2))//xiang li79         return 0;80     if(dis <= Pow(abs(r1 - r2)))81         return PI * Pow(min(r1 , r2));82     double A1 = 2 * acosl((Pow(r1) + dis - Pow(r2)) / 2.0 / r1 / sqrt(dis));83     double A2 = 2 * acosl((Pow(r2) + dis - Pow(r1)) / 2.0 / r2 / sqrt(dis));84     ans += 0.5 * (A1 * Pow(r1) + A2 * Pow(r2));85     ans -= 0.5 * (sinl(A1) * Pow(r1) + sinl(A2) * Pow(r2));//s = 1 / 2 * l * l * angle86     return ans;87 }88 int main()89 {90 #ifndef ONLINE_JUDGE91     freopen("D:\\系统优化\\Desktop\\littlepea\\in.data" , "r" , stdin);92 #endif93     scanf("%d%d%d%d%d%d" , &x1 , &y1 , &r1 , &x2 , &y2 , &r2);94     printf("%.20f" , Cal());95 96 #ifndef ONLINE_JUDGE97     fclose(stdin), fclose(stdout);98 #endif99 }
View Code

 

2017-5-22-Train:Educational Codeforces Round 2