CodeForces 659A 659B 659C 659D

659A:Round House

Vasya lives in a round building, whose entrances are numbered sequentially by integers from 1 to n. Entrance n and entrance 1 are adjacent.

Today Vasya got bored and decided to take a walk in the yard. Vasya lives in entrance a and he decided that during his walk he will move around the house b entrances in the direction of increasing numbers (in this order entrance n should be followed by entrance 1). The negative value of b corresponds to moving |b| entrances in the order of decreasing numbers (in this order entrance 1 is followed by entrance n). If b = 0, then Vasya prefers to walk beside his entrance.

Illustration for n = 6, a = 2, b =  - 5.

Help Vasya to determine the number of the entrance, near which he will be at the end of his walk.

Input

The single line of the input contains three space-separated integers n, a and b (1 ≤ n ≤ 100, 1 ≤ a ≤ n,  - 100 ≤ b ≤ 100) — the number of entrances at Vasya's place, the number of his entrance and the length of his walk, respectively.

Output

Print a single integer k (1 ≤ k ≤ n) — the number of the entrance where Vasya will be at the end of his walk.

一个圆圈,给定大小,位置,环绕位移,求最后所在位置。

#include<cstdio>
#include<cmath>
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
	int n,a,b; 
	while(scanf("%d%d%d",&n,&a,&b)!=EOF&&(n>=1&&n<=100)&&(a>=1&&a<=n)&&(b>=-100&&b<=100))
	{
	b=b%n;b=(b+n)%n;
	if(b==0) printf("%d\n",a);
	else if((a+b)%n==0) printf("%d\n",a+b);
	else printf("%d\n",(a+b)%n);
	}
	return 0;
}

注意b可能取很小的负数,所以先b=b%n,则(b+n)一定大于0,确定相当于环绕的最小正数。

注意没有位置0,输出特殊考虑。

659B:Qualifying Contest

Very soon Berland will hold a School Team Programming Olympiad. From each of the m Berland regions a team of two people is invited to participate in the olympiad. The qualifying contest to form teams was held and it was attended by n Berland students. There were at least two schoolboys participating from each of the m regions of Berland. The result of each of the participants of the qualifying competition is an integer score from 0 to 800 inclusive.

The team of each region is formed from two such members of the qualifying competition of the region, that none of them can be replaced by a schoolboy of the same region, not included in the team and who received a greater number of points. There may be a situation where a team of some region can not be formed uniquely, that is, there is more than one school team that meets the properties described above. In this case, the region needs to undertake an additional contest. The two teams in the region are considered to be different if there is at least one schoolboy who is included in one team and is not included in the other team. It is guaranteed that for each region at least two its representatives participated in the qualifying contest.

Your task is, given the results of the qualifying competition, to identify the team from each region, or to announce that in this region its formation requires additional contests.

Input

The first line of the input contains two integers n and m (2 ≤ n ≤ 100 000, 1 ≤ m ≤ 10 000, n ≥ 2m) — the number of participants of the qualifying contest and the number of regions in Berland.

Next n lines contain the description of the participants of the qualifying contest in the following format: Surname (a string of length from 1 to 10 characters and consisting of large and small English letters), region number (integer from 1 to m) and the number of points scored by the participant (integer from 0 to 800, inclusive).

It is guaranteed that all surnames of all the participants are distinct and at least two people participated from each of the m regions. The surnames that only differ in letter cases, should be considered distinct.

Output

Print m lines. On the i-th line print the team of the i-th region — the surnames of the two team members in an arbitrary order, or a single character "?" (without the quotes) if you need to spend further qualifying contests in the region.

Examples

Input

5 2
Ivanov 1 763
Andreev 2 800
Petrov 1 595
Sidorov 1 790
Semenov 2 503

Output

Sidorov Ivanov
Andreev Semenov

Input

5 2
Ivanov 1 800
Andreev 2 763
Petrov 1 800
Sidorov 1 800
Semenov 2 503

Output

?
Andreev Semenov

 同一个地区选出成绩最高的俩人进行比赛

#include<cstdio>
#include<cmath>
#include<iostream>
#include<algorithm>
using namespace std;
struct number
{
	char name[50];
	int reg;
	int score;
}n[100000];
bool cmp(number a,number b)
{
	if(a.reg==b.reg) return a.score>b.score;
	else return a.reg<b.reg;
}
int main()
{
	int m,x,i,l=0;
	scanf("%d%d",&m,&x);
	for(i=0;i<m;i++)
	{
		scanf("%s%d%d",&n[i].name,&n[i].reg,&n[i].score);
	}
	sort(n,n+m,cmp);
	for(i=0;i<m;i++)
	{
		if(n[i].reg==l) continue;
		else 
		{
			if(n[i].reg==n[i+1].reg)
			{
		    l=n[i].reg;
			if((n[i].score==n[i+1].score&&(n[i+2].reg==l&&n[i+2].score==n[i].score))||(n[i+2].reg==l&&(n[i+1].score==n[i+2].score)))
			{
				printf("?\n");
			}
			else
			{
				printf("%s %s\n",n[i].name,n[i+1].name);
			}
		    }
		}
	}
	return 0;
}

注意"?"的情况,同地区三人成绩相等,或同地区二三名成绩相等。

注意排序时,地区相同按成绩高到低,地区不同按地区小到大,尽量一次解决。

659C:Tanya and Toys

In Berland recently a new collection of toys went on sale. This collection consists of 109 types of toys, numbered with integers from 1 to 109. A toy from the new collection of the i-th type costs i bourles.

Tania has managed to collect n different types of toys a1, a2, ..., an from the new collection. Today is Tanya's birthday, and her mother decided to spend no more than m bourles on the gift to the daughter. Tanya will choose several different types of toys from the new collection as a gift. Of course, she does not want to get a type of toy which she already has.

Tanya wants to have as many distinct types of toys in her collection as possible as the result. The new collection is too diverse, and Tanya is too little, so she asks you to help her in this.

Input

The first line contains two integers n (1 ≤ n ≤ 100 000) and m (1 ≤ m ≤ 109) — the number of types of toys that Tanya already has and the number of bourles that her mom is willing to spend on buying new toys.

The next line contains n distinct integers a1, a2, ..., an (1 ≤ ai ≤ 109) — the types of toys that Tanya already has.

Output

In the first line print a single integer k — the number of different types of toys that Tanya should choose so that the number of different types of toys in her collection is maximum possible. Of course, the total cost of the selected toys should not exceed m.

In the second line print k distinct space-separated integers t1, t2, ..., tk (1 ≤ ti ≤ 109) — the types of toys that Tanya should choose.

If there are multiple answers, you may print any of them. Values of ti can be printed in any order.

Examples

Input

3 7
1 3 4

Output

2
2 5 

Input

4 14
4 6 12 8

Output

4
7 2 3 1

 输入有的玩具数量 有的钱,有哪些玩具

输出能买到的玩具

数字几表示玩具也表示钱数

#include<cstdio>
#include<cmath>
#include<iostream>
#include<algorithm>
using namespace std;
const long long max=1000000000;
int main()
{
	long long m,p,i,j,k,count=0;
	int a[100005],b[100005];
	scanf("%lld%lld",&m,&p);
	for(i=0;i<m;i++)
	{
		scanf("%lld",&b[i]);
	}
	sort(b,b+m);
	j=1;i=0;
	while(p>=j)
	{
		if(j==b[i]) 
		{
		    i++;j++;
		}
		else 
		{
			a[count++]=j;p-=j;j++;
		}
	}
	printf("%d\n",count);
	if(count>0)
	{
	for(i=0;i<count-1;i++)
	{
		printf("%d ",a[i]);
	} 
	printf("%d\n",a[count-1]);
    }
	return 0;
}

 求出没有的玩具成数组,计算能购买的数量。如果用相加计算购买的钱,需要在假设计算后判断是否能购买,不简化。可直接用输入的拥有钱数减去购买的娃娃,减少变量定义。

最后必须得判断count的值,等于0时,不输出,否则非法输出。

659D:Bicycle Race

Maria participates in a bicycle race.

The speedway takes place on the shores of Lake Lucerne, just repeating its contour. As you know, the lake shore consists only of straight sections, directed to the north, south, east or west.

Let's introduce a system of coordinates, directing the Ox axis from west to east, and the Oy axis from south to north. As a starting position of the race the southernmost point of the track is selected (and if there are several such points, the most western among them). The participants start the race, moving to the north. At all straight sections of the track, the participants travel in one of the four directions (north, south, east or west) and change the direction of movement only in bends between the straight sections. The participants, of course, never turn back, that is, they do not change the direction of movement from north to south or from east to west (or vice versa).

Maria is still young, so she does not feel confident at some turns. Namely, Maria feels insecure if at a failed or untimely turn, she gets into the water. In other words, Maria considers the turn dangerous if she immediately gets into the water if it is ignored.

Help Maria get ready for the competition — determine the number of dangerous turns on the track.

Input

The first line of the input contains an integer n (4 ≤ n ≤ 1000) — the number of straight sections of the track.

The following (n + 1)-th line contains pairs of integers (xi, yi) ( - 10 000 ≤ xi, yi ≤ 10 000). The first of these points is the starting position. The i-th straight section of the track begins at the point (xi, yi) and ends at the point (xi + 1, yi + 1).

It is guaranteed that:

  • the first straight section is directed to the north;
  • the southernmost (and if there are several, then the most western of among them) point of the track is the first point;
  • the last point coincides with the first one (i.e., the start position);
  • any pair of straight sections of the track has no shared points (except for the neighboring ones, they share exactly one point);
  • no pair of points (except for the first and last one) is the same;
  • no two adjacent straight sections are directed in the same direction or in opposite directions.

Output

Print a single integer — the number of dangerous turns on the track.

Examples

Input

6
0 0
0 1
1 1
1 2
2 2
2 0
0 0

Output

1

Input

16
1 1
1 5
3 5
3 7
2 7
2 9
6 9
6 7
5 7
5 3
4 3
4 4
3 4
3 2
5 2
5 1
1 1

Output

6

 线路围成一个湖,即封闭图形。如果直走会掉进湖里,就称为危险拐弯。危险拐弯处内角为270度,其余为90度。给定边数则图形内角个数确定。180*(n-2)=270*x+90*(n-x)得:x=(n-4)/2。遇到类似的几何多思考,多画图,少用蛮力。

#include<cstdio>
#include<cmath>
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
    int n,i,x[1005],y[1005];
    scanf("%d",&n);
    for(i=0;i<n;i++)
    {
    	scanf("%d%d",&x[i],&y[i]);
	}
	printf("%d\n",(n-4)/2);
	return 0;
}

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值