Special Permutation CodeForces - 1352G(构造)

思路:一开始想复杂了,直接搞的图论,TLE了。后来发现其实可以直接构造。前四个我们可以构造出2 3 1 4 的形式,如果n>=4的话,那么可以左右来回放置,这样就可以构造成功。只有n<=3的时候才不能构造成功。
代码如下:

#include
using namespace std;

int n;
inline string fcs(int i)
{
	string tt="";
	while(i)
	{
		tt=(char)(i%10+'0')+tt;
		i/=10;
	}
	tt+=" ";
	return tt;
}
int main() 
{
    int T;
    cin >> T;
    while (T--) 
	{
        int n;
        cin >> n;
        if (n <= 3) puts("-1");
        else if (n == 4) puts("2 4 1 3"); 
		else 
		{
            string ans;
            ans+="2 4 1 3 ";
            int flag=1;
            for(int i=5;i<=n;i++)
            {
            	if(flag) ans+=fcs(i);
            	else ans=fcs(i)+ans;
            	flag^=1;
			}
			cout<<ans<<endl;
        }
    }
    return 0;
}

努力加油a啊,(o)/~

你可能感兴趣的:(Special Permutation CodeForces - 1352G(构造))