贪心算法
1.字典序最小问题
#include<iostream>
using namespace std;
#define MAX 2000
char S[MAX+1];
int main(){
int n;
cin>>n;
for(int i=0;i<n;i++)
{
cin>>S[i];//用数组来存放字母
}
int a=0,b=n-1;
while(a<=b){
bool vis=false;
for(int i=0;a+i<=b;i++)//i的作用是在比较的两个字母相同时,会使a自动往后顺一个比较
{
if(S[a+i]<S[b-i]){
vis=true;
break;
}
if(S[a+i]>S[b-i]){
vis=false;
break;
}
}
if(vis)
cout<<S[a++];
else cout<<S[b--];
}
return 0;
}
2.Saruman's army
#include<iostream>
#include<algorithm>
using namespace std;
#define max 200
int S[max];
int main(){
int N,R;
cin>>N>>R;
for(int i=0;i<N;i++)
{
cin>>S[i];
}
sort(S,S+N);
int i=0,ans=0;
while(i<N){
int s=S[i++];
while(i<N && S[i]<=s+R)i++;
int p=S[i-1];
while(i<N && S[i]<=p+R)i++;
ans++;
}
cout<<ans;
return 0;
}