给定一些数将这些数组合成一个新的数,并对它们由小到大排序
2016-03-22 23:04
363 查看
http://114.215.99.34/#/enter/problem
//1022
/*其实这道题就是要找到规律。
过程是,从右到左扫描,只要数字在不断递增(从右到左递增)就继续向左,知道找到一个不递增的元素,记录他的下标(设为p),
然后在递增区间内找到一个大于它并且最接近他的元素,交换2个的位子,然后再将p后的元素按递减排列(从右到左递减),
由于交换后还是有序的,所以只需要首尾互换即可。
至于这个为什么正确,说不清楚,慢慢体会吧*/
#include<iostream>
using namespace std;
int b[10010];
void res(int x[],int head,int tail)
{
int i,temp;
for(i=head;i<=(head+tail)/2;i++)
{
temp=x[i];
x[i]=x[tail+head-i];
x[tail+head-i]=temp;
}
}
void deal(int a[],int n)
{
int p,q,i,j;
for(i=n-1;i>=0;i--)
{
if(a[i]<a[i+1] && i+1<n)
{
p=i;
break;
}
}
for(j=n-1;j>p;j--)
if(a[j]>a[p])
{
q=j;
break;
}
int temp;
temp=a[p];
a[p]=a[q];
a[q]=temp;
res(a,p+1,n-1);
}
int main()
{
int n,m,i;
int a[10010];
cin>>n>>m;
for(i=0;i<n;i++)
cin>>a[i];
for(i=0;i<m;i++)
deal(a,n);
cout<<a[0];
for(i=1;i<n;i++)
cout<<" "<<a[i];
return 0;
}
//1022
/*其实这道题就是要找到规律。
过程是,从右到左扫描,只要数字在不断递增(从右到左递增)就继续向左,知道找到一个不递增的元素,记录他的下标(设为p),
然后在递增区间内找到一个大于它并且最接近他的元素,交换2个的位子,然后再将p后的元素按递减排列(从右到左递减),
由于交换后还是有序的,所以只需要首尾互换即可。
至于这个为什么正确,说不清楚,慢慢体会吧*/
#include<iostream>
using namespace std;
int b[10010];
void res(int x[],int head,int tail)
{
int i,temp;
for(i=head;i<=(head+tail)/2;i++)
{
temp=x[i];
x[i]=x[tail+head-i];
x[tail+head-i]=temp;
}
}
void deal(int a[],int n)
{
int p,q,i,j;
for(i=n-1;i>=0;i--)
{
if(a[i]<a[i+1] && i+1<n)
{
p=i;
break;
}
}
for(j=n-1;j>p;j--)
if(a[j]>a[p])
{
q=j;
break;
}
int temp;
temp=a[p];
a[p]=a[q];
a[q]=temp;
res(a,p+1,n-1);
}
int main()
{
int n,m,i;
int a[10010];
cin>>n>>m;
for(i=0;i<n;i++)
cin>>a[i];
for(i=0;i<m;i++)
deal(a,n);
cout<<a[0];
for(i=1;i<n;i++)
cout<<" "<<a[i];
return 0;
}
相关文章推荐
- servlet连接池的初步使用
- java泛型举例
- javascript之容易忽略的错误
- 手写服务器httpserver_封装分发器_多请求处理_多态_反射JAVA202-204
- 217. Contains Duplicate
- bzoj 3109: [cqoi2013]新数独
- svn 插件安装
- 多达 95% 的 HTTPS 链接能被黑客劫持
- 稀疏矩阵算余弦相似度
- C++ 多线程计时的bug,千万别用clock()
- 事件处理
- SpringMVC 过滤json对象
- C# TimeSpan计算时间间隔
- 深入理解Java的接口和抽象类
- 有关位运算的小总结
- bzoj 2879: [Noi2012]美食节
- angular-应用
- linux下安装mysql
- Basic Concepts of Elasticsearch Elasticsearch基本概念
- Sublime 使用小技巧