首页 > 其他分享 >南京外国语学校暑期集训7/8号排序2

南京外国语学校暑期集训7/8号排序2

时间:2024-07-08 21:53:47浏览次数:14  
标签:node score int 暑期 外国语 数组 y1 x1 集训


显然,这道题使用快排第k大做,快排第k大思想:(下标从1开始)每次找一个key值,一轮后可以得到key在原数组中的位置(暂且称之为a),把a和n-k+1值比较,一样就返回,小就往左边找,大就往右边找。
然后原数组在main里按题目要求初始化一下就行了

点击查看代码
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N = 1e7 + 10,P = 1000000007;
int s[N];
int n,k;
void qsort(int L,int R)
{
	int low=L,high=R;
	int key=s[low];
	while(low<high)
    {
		while(low<high&&key<=s[high])high--;
		if(low<high)s[low]=s[high];
		while(low<high&&key>=s[low])low++;
		if(low<high)s[high]=s[low];
	}
	s[low]=key;
	if(L<low-1)qsort(L,low-1);
	if(low+1<R)qsort(low+1,R);
}
signed main()
{
	scanf("%d%d%d",&n,&s[1],&k);
	for(int i = 2;i <= n;i ++ )
  {
		s[i] = 1ll * s[i - 1] * 1ll * s[i - 1] % P;
	}
	qsort(1,n);
	printf("%d\n",s[n - k + 1]);
	return 0;
}


思路:因为有两个拦截导弹,所以所有导弹必被两个系统瓜分,所以我们可以枚举两个系统拦截的导弹,对两个数组取最大值,然后就去打擂台比较最优值。
附带公式:两点距离公式用这个(x1 - x2)2+(y1 - y2)2

点击查看代码
#include<bits/stdc++.h>
using namespace std;
#define y1 y12312
int x1,y1,x2,y2,n;
int d[6000005];
struct node
{
	int x;
	int y;
}w[6000005];
bool cmp(node a,node b)
{
	int q=(x1-a.x)*(x1-a.x)+(y1-a.y)*(y1-a.y);
	int p=(x1-b.x)*(x1-b.x)+(y1-b.y)*(y1-b.y);
	return q<p; 
} 
int main()
{
	int ans=0;
	cin>>x1>>y1>>x2>>y2;
	cin>>n;
	for(int i=0;i<n;i++)
		cin>>w[i].x>>w[i].y;
	sort(w,w+n,cmp);
	for(int i=n-1;i>=0;i--)
	{
		int h=(x2-w[i].x)*(x2-w[i].x)+(y2-w[i].y)*(y2-w[i].y);
		d[i]=max(d[i+1],h);
	}
	ans=d[0];
	for(int i=0;i<n;i++)
	{
		int cnt=0;
		cnt=(x1-w[i].x)*(x1-w[i].x)+(y1-w[i].y)*(y1-w[i].y);
		cnt+=d[i+1];
		ans=min(ans,cnt);
	 } 
	cout<<ans;
}


用结构体将人存起来

每次两两比较,赢的放在一个数组,输的放在另一个数组因为之前已经有序,可以保证两数组前面的排名在后面之前所以只要比较从两数组开头开始比就可以,差不多就是归并排序用另一个数组存,两数组开头比较,排名靠前的放进去,此数组开头向后移

点击查看代码
#include<bits/stdc++.h>
using namespace std;
const int N=600001;
struct node
{
	int No,shili,score;
};
node a[N],b[N],c[N];
int n,r,q;
bool cmp(node x,node y)
{
	if(x.score!=y.score) return x.score>y.score;
	return x.No<y.No;
}
void deal()
{
	int i,j,k,j1,k1;
	for(i=0;i<n;i++)
		if(a[2*i].shili>a[2*i+1].shili)
		{
			a[2*i].score++;
			b[i]=a[2*i];
			c[i]=a[2*i+1];
		}
		else
		{
			a[2*i+1].score++;
			b[i]=a[2*i+1];
			c[i]=a[2*i];
		}
	for(i=j=k=0;j<n&&k<n;i++)
	{
		a[i]=(cmp(b[j],c[k])?b[j++]:c[k++]);
	}
	while(j<n) a[i++]=b[j++];
	while(k<n) a[i++]=c[k++]; 
}
int main()
{
	cin>>n>>r>>q;
	for(int i=0;i<n+n;i++)
	{
		cin>>a[i].score;
		a[i].No=i+1;
	}
	for(int i=0;i<n+n;i++) cin>>a[i].shili;
	sort(a,a+2*n,cmp);
	for(int i=0;i<r;i++)
		deal();
	cout<<a[q-1].No<<endl;
}

标签:node,score,int,暑期,外国语,数组,y1,x1,集训
From: https://www.cnblogs.com/e4ns/p/18290741

相关文章

  • 24暑期第三次训练C组题解
    目录A津津的储蓄计划auto遍历:B校门外的树memset()C杨辉三角DSpecialCharacters位运算&三目运算符EStrangeSplittingFStickogonGCardExchange构造结构体和重载运算符HLeastProductI选数JPeter的烟A津津的储蓄计划模拟题,按题意模拟即可.voidfunc(){ intjin......
  • 07_07_暑期个人赛3
    A.Row时间:2024-07-08原题:CodeforcesRound484(Div.2)A.Row题意给一串字符串有01组成,1边上不能有1,0边上不能没有1,如果满足输出yes思路就,一个一个遍历过来,写这题主要因为需要看清题目,注意如果只有一个“0”需要输出no,因为没有1A.AliceandBob时间:2024-07-08原题:Cod......
  • 大一暑期记录(1)
    在暑假开始的第一周我阅读了王建民老师推荐的书籍《大道至简:软件工程实践者的思想》的前五章,其中第一章通过引用愚公移山这一故事讲解了编程的精义鼓舞了我这个编程菜鸟的内心,这一张内容较为易懂所以看得很快,但从第二章就开始涉及团队的协作与管理以及一些专业术语,这让这本书的理......
  • 2024暑假南京外国语学校c++集训 20240706 测试(J/S-)
    A笔记本电脑第一题没啥好说的了点击查看代码#include<bits/stdc++.h>usingnamespacestd;intn;set<int>t;pair<int,int>arr[100009];intmain(){ ios::sync_with_stdio(0),cin.tie(0),cout.tie(0); cin>>n; for(inti=1;i<=n;i++) { cin>>......
  • 「杂文」开始集训前你所需要知道的
    写在前面面向入门选手的指导。ICPC/CCPC赛事与赛制ICPC/CCPCICPC(英文:InternationalCollegiateProgrammingContest,中文:国际大学生程序设计竞赛)由ICPC基金会(英文:ICPCFoundation)举办,是最具影响力的大学生计算机竞赛。由于以前ACM赞助这个竞赛,也有很多人习惯叫它ACM竞......
  • 暑期海亮游记
    如题,海亮游记第二弹前几天一直没写,导致想写的时候很多事情已经记不起是day几发生的了。加之也不是特别喜欢那种一天记一点的形式,遂随便瞎写。我将就着写,诸位也将就着看吧。学到的知识“我以为我去div2是擦地板的,结果发现我在地底下”在海亮虽然被拖着走,但还是学到了不少新知......
  • 暑假集训第五天
    并查集/最小生成树/Kruskal重构树专题TwoFamousCompanieshttps://www.luogu.com.cn/problem/solution/SP11579如果白边整体权值太小,我们就把所有白边的权值加上一个正值,让整体权值变大。反之,白边整体权值过大,我们就把所有白边的权值加上一个负值。让整体权值变小。我们把......
  • 《IT 领域新生暑期学习之旅》
    IT专业入门,高考假期预习指南七月来临,各省高考分数已揭榜完成。而高考的完结并不意味着学习的结束,而是新旅程的开始。对于有志于踏入IT领域的高考少年们,这个假期是开启探索IT世界的绝佳时机。作为该领域的前行者和经验前辈,你是否愿意为准新生们提供一份全面的学习路线图呢?快来......
  • 暑期练习
    0705494.目标和首先考虑了使用dfs但是结果超时classSolution:deffindTargetSumWays(self,nums:List[int],target:int)->int:defdfs(nums,target,index,n):ifn==index:iftarget==0:return1......
  • 07_04_暑期个人赛1
    C.Caninepoetry时间:2024-07-05原题:GoodBye2020C.Caninepoetry题意对于一个字符串\(s\),可以对任一字符变为\(*\)号,使所有子串不为回文串,即可将\(babba\)变为\(ba*ba\)使字符串内不存在回文串数据范围:\(|s|\le1e5\)思路对于某回文字符串,如果是长度为奇数,那......