1.28训练
作者:互联网
题意:直接翻译
思路:直接遍历输出即可
代码:
1 #include<iostream> 2 #include<algorithm> 3 #include<cstdio> 4 #include<cstring> 5 #include<cmath> 6 using namespace std; 7 int main(){ 8 int n,m; 9 scanf("%d %d",&n,&m); 10 int a[15]={0},b[15]={0}; 11 for(int i=0;i<n;i++){ 12 int num; 13 scanf("%d",&a[i]); 14 } 15 for(int i=0;i<m;i++){ 16 int num; 17 scanf("%d",&num); 18 b[num]++; 19 } 20 for(int i=0;i<n;i++){ 21 if(b[a[i]]>0){ 22 printf("%d ",a[i]); 23 } 24 } 25 26 }View Code
题意:与圆桌骑士不同的是,多边形圆桌骑士没有贵族身份却乐于自相残杀。但每个骑士都有一些力量,一个骑士可以杀死另一个骑士,当且仅当他的力量大于受害者的力量。然而,即使是这样的骑士也会折磨他的良心,所以他最多只能杀死k个骑士。此外,每个骑士都有一定数量的硬币。杀死一个人后,骑士可以捡起所有受害者的硬币。现在每个骑士都在思考:如果他杀死其他骑士,他能得到多少金币?你应该为每个骑士回答这个问题。
思路:直接按照题目要求,其实就是求前n项和,然后减去最小的那一个
想错:一开始想用set找前几个里面的最小值,发现wa8样例,感觉set直接去重了,估计是出了岔子,后来又用数组手动找的,也不会超时,最简单的往往最有效
代码:
1 #include<iostream> 2 #include<algorithm> 3 #include<cstdio> 4 #include<cstring> 5 #include<cmath> 6 #include<set> 7 using namespace std; 8 const int maxx=1e5+10; 9 struct people{ 10 long long int power; 11 long long int xu; 12 long long int money; 13 long long int sum=0; 14 long long int p=0; 15 }s[maxx]; 16 bool cmp1(people a,people b){ 17 return a.power<b.power; 18 } 19 bool cmp2(people a,people b){ 20 return a.xu<b.xu; 21 } 22 bool cmp3(int x,int y){ 23 return x>y; 24 } 25 int main(){ 26 int n,k; 27 scanf("%d %d",&n,&k); 28 for(int i=0;i<n;i++){ 29 scanf("%lld",&s[i].power); 30 s[i].xu=i; 31 } 32 for(int i=0;i<n;i++){ 33 scanf("%lld",&s[i].money); 34 } 35 long long int v[15]={0}; 36 sort(s,s+n,cmp1); 37 long long int minn=1e9; 38 long long int sum=0; 39 set<long long int> num; 40 int t=-1; 41 for(int i=0;i<n;i++){ 42 sort(v,v+t+1,cmp3); 43 if(t!=10){ 44 t++; 45 } 46 for(int j=0;j<k&&j<t;j++){ 47 s[i].sum+=v[j]; 48 } 49 s[i].sum+=s[i].money; 50 v[t]=max(s[i].money,v[t]); 51 } 52 sort(s,s+n,cmp2); 53 for(int i=0;i<n;i++){ 54 printf("%lld ",s[i].sum); 55 }View Code
题意:就是问两个正方形是不是相交
思路:直接枚举每个点即可,因为点的范围很小
想错:我一开始看它给的图,以为只要是顶点在另一个图形里面就行,结果不过,还有那种交叉,顶点就会都在图形外的,直接枚举就能解决的问题
代码:
1 #include <bits/stdc++.h> 2 using namespace std; 3 struct point 4 { 5 int x,y; 6 int det(point p) 7 { 8 return x*p.y-y*p.x; 9 } 10 }; 11 point a[10],b[10]; 12 int GetCross(point p1, point p2,point p) 13 { 14 return (p2.x - p1.x) * (p.y - p1.y) -(p.x - p1.x) * (p2.y - p1.y); 15 } 16 bool check(point p) 17 { 18 return GetCross(b[1],b[2],p) * GetCross(b[3],b[4],p) >= 0 && GetCross(b[2],b[3],p) * GetCross(b[4],b[1],p) >= 0; 19 } 20 int main() 21 { 22 for(int i=1;i<=4;i++) 23 { 24 scanf("%d%d",&a[i].x,&a[i].y); 25 } 26 for(int i=1;i<=4;i++) 27 { 28 scanf("%d%d",&b[i].x,&b[i].y); 29 } 30 int mix = min(min(min(a[1].x,a[2].x),a[3].x),a[4].x); 31 int mxx = max(max(max(a[1].x,a[2].x),a[3].x),a[4].x); 32 int miy = min(min(min(a[1].y,a[2].y),a[3].y),a[4].y); 33 int mxy = max(max(max(a[1].y,a[2].y),a[3].y),a[4].y); 34 for(int i=mix;i<=mxx;i++) 35 { 36 for(int j=miy;j<=mxy;j++) 37 { 38 point pi; 39 pi.x = i; 40 pi.y=j; 41 if(check(pi)) 42 { 43 printf("YES\n"); 44 return 0; 45 } 46 } 47 } 48 printf("NO\n"); 49 return 0; 50 }View Code
标签:10,训练,point,int,long,1.28,骑士,include 来源: https://www.cnblogs.com/bonel/p/14349774.html