/*删数问题
#include <iostream>
using namespace std;
int main()
{
string n;
cin>>n;
int len=n.length();
int s;
cin>>s;
int i,j,k;
for(i=1;i<=s;i++)
{
for(j=1;j<len;j++)
{
if(n[j]<n[j-1])
{
break;
}
}
if(j<len)
{
len--;
for(k=j-1;k<len;k++)
{
n[k]=n[k+1];
}
}
else{
len--;
}
}
for(i=0;i<len;i++)
{
cout<<n[i];
}
return 0;
}*/
/*数列极差问题
#include <iostream>
#include <algorithm>
using namespace std;
#define maxn 99999999;
#define minn -1;
int main()
{
int n;
cin >> n;
int a[50000 + 10],b[50000+10];
for(int i = 0;i < n;i ++ )
{
cin >> a[i];
b[i]=a[i];
}
int len=n;
while(len>1)//求max
{
sort(a,a+n);
a[0]=a[0]*a[1]+1;
a[1]=maxn;
len--;
}
int max1=a[0];
int len2=n;
while(len2>1)//求min
{
sort(b,b+n);
b[n-1]=b[n-1]*b[n-2]+1;
b[n-2]=minn;
len2--;
}
int min2=b[n-1];
cout<<max1-min2<<endl;
return 0;
}*/
/*不相交区间问题*/
/*电视节目安排
#include <iostream>
#include <algorithm>
using namespace std;
typedef struct ds{
int x;
int y;
}DS;
DS T[100+10];
bool cmp(DS s1,DS s2)
{
return s1.y<s2.y;
}
int main()
{
int n;
while(cin>>n)
{
if(n==0) break;
for(int i=0;i<n;i++)
{
cin>>T[i].x>>T[i].y;
}
sort(T,T+n,cmp);
int Y=T[0].y;
int ans=1;//第一次选择x1到y1
for(int i=1;i<n;i++)
{
if(T[i].x>=Y)//循环只选不相交的(开区间>=)
{
Y=T[i].y;
ans++;
}
}
cout<<ans<<endl;
}
return 0;
}
*/
/*区间选点问题*/
/*监测点
#include <iostream>
#include <algorithm>
using namespace std;
typedef struct qj{
int x;
int y;
}QJ;
QJ a[100+10];
bool cmp(QJ s1,QJ s2)
{
if(s1.y!=s2.y)
{
return s1.y<s2.y;//y从小到大排序
}
else{
return s1.x>s2.x;//当y相等时x从大到小排序
}
}
int main()
{
int t;
cin>>t;
while(t--)
{
int n;
cin>>n;
for(int i=0;i<n;i++)
{
cin>>a[i].x>>a[i].y;
}
sort(a,a+n,cmp);
int ans=1;//第一个点是啊a[0].y
int Y=a[0].y;
for(int i=1;i<n;i++)
{
if(a[i].x>Y)
{
Y=a[i].y;//更新右端点
ans++;
}
}
cout<<ans<<endl;
}
return 0;
}
*/
/*雷达问题*/
/*广告问题*/
/*区间覆盖问题*/
/*时空定位1
#include <iostream>
#include <algorithm>
#include <cmath>
using namespace std;
int n,m;
double a[600+10];
bool cmp(double s1,double s2)
{
return s1>s2;
}
int main()
{
cin>>m;
while(m--)
{
int i;
cin>>n;
for(i=0;i<n;i++)
{
cin>>a[i];
}
sort(a,a+n,cmp);
double length=0;
for(i=0;i<n;i++)
{
length=length+2.0*(sqrt(a[i]*a[i]-1));
if(length>=20.0)
break;
}
cout<<i+1<<endl;
}
return 0;
}
*/
/*时间定位2
#include <iostream>
#include <cmath>
#include <algorithm>
using namespace std;
struct qj1{
int a1;
int b1;
}a[10000+10];
struct qj2{
double a2;
double b2;
}b[10000+10];
bool cmp(qj2 s1,qj2 s2)
{
return s1.a2<s2.a2;
}
int main()
{
int N;
cin>>N;
while(N--)
{
int n,w,h;
cin>>n>>w>>h;
for(int i=0;i<n;i++)
{
cin>>a[i].a1>>a[i].b1;
}
int j=0;
for(int i=0;i<n;i++)
{
if(a[i].b1*1.0>h/2.0)
{
b[j].a2=a[i].a1*1.0-sqrt(a[i].b1*a[i].b1*1.0-h*h*1.0/4.0);
if(b[j].a2<0) b[j].a2=0;
b[j].b2=a[i].a1*1.0+sqrt(a[i].b1*a[i].b1*1.0-h*h*1.0/4.0);
if(b[j].b2>w) b[j].b2=w;
j++;
}
}
sort(b,b+j,cmp);
bool flag=1;
int ans=0,i=0;
double maxlen=0,p=0;
while(p<w*1.0)
{
maxlen=0;
for(i;b[i].a2<=p&&i<j;i++)
{
if(b[i].b2-p>=maxlen)
{
maxlen=b[i].b2-p;
}
}
if(!maxlen)
{
flag=0;
break;
}
p+=maxlen;
ans++;
}
if(!flag)
cout<<"0"<<endl;
else cout<<ans<<endl;
}
return 0;
}
*/
来源:https://blog.csdn.net/qq_43487996/article/details/99475918