Little penguin Polo adores integer segments, that is, pairs of integers [l; r] (l ≤ r).
He has a set that consists of n integer segments: [l1; r1], [l2; r2], ..., [ln; rn]. We know that no two segments of this set intersect. In one move Polo can either widen any segment of the set 1 unit to the left or 1 unit to the right, that is transform [l; r] to either segment[l - 1; r], or to segment [l; r + 1].
The value of a set of segments that consists of n segments [l1; r1], [l2; r2], ..., [ln; rn] is the number of integers x, such that there is integer j, for which the following inequality holds, lj ≤ x ≤ rj.
Find the minimum number of moves needed to make the value of the set of Polo's segments divisible by k.
The first line contains two integers n and k (1 ≤ n, k ≤ 105). Each of the following n lines contain a segment as a pair of integers li andri ( - 105 ≤ li ≤ ri ≤ 105), separated by a space.
It is guaranteed that no two segments intersect. In other words, for any two integers i, j (1 ≤ i < j ≤ n) the following inequality holds,min(ri, rj) < max(li, lj).
In a single line print a single integer — the answer to the problem.
#include <cstdio>
#include <algorithm>
#include <iostream>
using namespace std;
const int maxn=100+5;
int l[maxn],r[maxn];
int main()
{
int n,k;
scanf("%d%d",&n,&k);
int sum=0;
for(int i=0; i<n; i++)
{
int l,r;
scanf("%d%d",&l,&r);
sum+=r-l+1;
}
if(sum%k==0) printf("0\n");
else
{
int cnt=k-(sum%k);
printf("%d\n",cnt);
}
return 0;
}
Little penguin Polo has an n × m matrix, consisting of integers. Let's index the matrix rows from 1 to n from top to bottom and let's index the columns from 1 to m from left to right. Let's represent the matrix element on the intersection of row i and column j as aij.
In one move the penguin can add or subtract number d from some matrix element. Find the minimum number of moves needed to make all matrix elements equal. If the described plan is impossible to carry out, say so.
The first line contains three integers n, m and d (1 ≤ n, m ≤ 100, 1 ≤ d ≤ 104) — the matrix sizes and the d parameter. Next n lines contain the matrix: the j-th integer in the i-th row is the matrix element aij (1 ≤ aij ≤ 104).
In a single line print a single integer — the minimum number of moves the penguin needs to make all matrix elements equal. If that is impossible, print "-1" (without the quotes).
#include <cstdio>
#include <algorithm>
using namespace std;
const int maxn=10000+5;
int a[maxn];
//找到数组中最中间的数即可
int main()
{
int n,k,m;
scanf("%d%d%d",&n,&m,&k);
bool flag=true;
scanf("%d",&a[0]);
for(int i=1; i<n*m; i++)
scanf("%d",&a[i]);
sort(a,a+n*m);
int ave=a[n*m/2],cnt=0;
for(int i=0;i<n*m;i++)
{
int t=abs(ave-a[i]);
if(t%k!=0) flag=false;
else cnt+=t/k;
}
if(!flag) printf("-1\n");
else printf("%d\n",cnt);
return 0;
}
Little penguin Polo adores strings. But most of all he adores strings of length n.
One day he wanted to find a string that meets the following conditions:
- The string consists of n lowercase English letters (that is, the string's length equals n), exactly k of these letters are distinct.
- No two neighbouring letters of a string coincide; that is, if we represent a string as s = s1s2... sn, then the following inequality holds,si ≠ si + 1(1 ≤ i < n).
- Among all strings that meet points 1 and 2, the required string is lexicographically smallest.
Help him find such string or state that such string doesn't exist.
String x = x1x2... xp is lexicographically less than string y = y1y2... yq, if either p < q and x1 = y1, x2 = y2, ... , xp = yp, or there is such number r (r < p, r < q), that x1 = y1, x2 = y2, ... , xr = yr and xr + 1 < yr + 1. The characters of the strings are compared by their ASCII codes.
A single line contains two positive integers n and k (1 ≤ n ≤ 106, 1 ≤ k ≤ 26) — the string's length and the number of distinct letters.
In a single line print the required string. If there isn't such string, print "-1" (without the quotes).
#include <cstdio>
using namespace std;
//要使字典序最小,即ab尽可能的多
//再考虑k=1时的特殊情况即可
int main()
{
int n,k;
scanf("%d%d",&n,&k);
int i=0;
if(n<k)
{
printf("-1\n");
return 0;
}
if(k==1)
{
if(n==1) printf("a");
else printf("-1");
printf("\n");
return 0;
}
for(int i=1;i<=n+2-k;i++)
if(i%2) printf("a");
else printf("b");
for(int i=2;i<k;i++)
printf("%c",'a'+i);
printf("\n");
return 0;
}