您的位置:首页 > 其它

Codeforces 339

2013-09-01 09:31 288 查看
这是一场5道题都写不到1K的CF。

A:

题意是排序。

#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>

using namespace std;

int n,z[1010],l[4],r[4];

bool check()
{
for (int a=1;a<=n;a++)
if (z[a]!=a) return false;
return true;
}

bool dfs(int x)
{
if (check())
{
printf("%d\n",x-1);
for (int a=x-1;a>0;a--)
printf("%d %d\n",l[a],r[a]);
return true;
}
if (x>3) return false;
for (int a=1;a<=n;a++)
if (z[a]!=a)
{
l[x]=a;
for (int b=a+1;;b++)
if (z[b]==a)
{
r[x]=b;
reverse(z+a,z+b+1);
if (dfs(x+1)) return true;
reverse(z+a,z+b+1);
break;
}
break;
}
for (int a=n;a>=1;a--)
if (z[a]!=a)
{
r[x]=a;
for (int b=a-1;;b--)
if (z[b]==a)
{
l[x]=b;
reverse(z+b,z+a+1);
if (dfs(x+1)) return true;
reverse(z+b,z+a+1);
break;
}
break;
}
return false;
}

int main()
{
scanf("%d",&n);
for (int a=1;a<=n;a++)
scanf("%d",&z[a]);
dfs(1);

return 0;
}


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: