题目1:
# [NOIP2008 普及组] 排座椅
## 题目描述
#include<iostream>
#include<cmath>
#include<algorithm>
using namespace std;
int m,n,k,l,d;
int h[1001],s[1001],p[1001];
int main(){
cin>>m>>n>>k>>l>>d;
for(int i=1;i<=d;i++){
int x,y,p,q;
cin>>x>>y>>p>>q;
if(x==p) ++s[min(y,q)];
else ++h[min(x,p)];
}
for(int i=1;i<=m;i++)
p[i]=i;
for(int i=1;i<=m;i++){
for(int j=i+1;j<=m;j++){
if(h[i]<h[j]){
swap(h[i],h[j]);
swap(p[i],p[j]);
}
}
}
for(int i=1;i<=k;i++){
for(int j=i+1;j<=k;j++)
if(p[i]>p[j]) swap(p[i],p[j]);
}
for(int i=1;i<=k;i++){
cout<<p[i];
if(i!=k) cout<<' ';
}
cout<<endl;
for(int i=1;i<=n;i++)
p[i]=i;
for(int i=1;i<=n;i++){
for(int j=i+1;j<=n;j++){
if(s[i]<s[j]){
swap(s[i],s[j]);
swap(p[i],p[j]);
}
}
}
for(int i=1;i<=l;i++){
for(int j=i+1;j<=l;j++)
if(p[i]>p[j]) swap(p[i],p[j]);
}
for(int i=1;i<=l;i++){
cout<<p[i];
if(i!=l) cout<<' ';
}
return 0;
}
题目2:
# [NOIP2010 普及组] 导弹拦截
## 题目描述
【数据范围】。
- 对于 10%10% 的数据,�=1N=1。
- 对于 20%20% 的数据,1≤�≤21≤N≤2。
- 对于 40%40% 的数据,1≤�≤1001≤N≤100。
- 对于 70%70% 的数据,1≤�≤10001≤N≤1000。
- 对于 100%100% 的数据,1≤�≤1051≤N≤105,且所有坐标分量的绝对值都不超过 10001000。
#include<bits/stdc++.h>
using namespace std;
struct Info{
int d1,d2;
bool operator < (const Info &A)
{
return d1<A.d1;
}
}a[100010];
int n,X1,Y1,X2,Y2;
int f[100010];
int main()
{
scanf("%d%d%d%d",&X1,&Y1,&X2,&Y2);
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
int x,y;
scanf("%d%d",&x,&y);
a[i].d1=(x-X1)*(x-X1)+(y-Y1)*(y-Y1);
a[i].d2=(x-X2)*(x-X2)+(y-Y2)*(y-Y2);
}
sort(a+1,a+n+1);
f[n+1]=0;
for(int i=n;i;--i)
f[i]=max(f[i+1],a[i].d2);
int ans=1<<30;
for(int i=0;i<=n;i++)
ans=min(ans,a[i].d1+f[i+1]);
printf("%d",ans);
return 0;
}