답안 #315510

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
315510 2020-10-23T02:30:57 Z daniel920712 Cat (info1cup19_cat) C++14
25 / 100
704 ms 17132 KB
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <algorithm>
#include <vector>
#include <stack>

using namespace std;
int all[3000005];
int where[3000005];
vector < pair < int , int > > ans;
stack < int > how;
int main()
{
    int T,x,y,ok=1,N,i,j,con=0,t,tt=0;
    scanf("%d",&T);
    while(T--)
    {
        con=0;
        t=0;
        ok=1;
        ans.clear();
        scanf("%d",&N);
        for(i=1;i<=N;i++)
        {
            scanf("%d",&all[i]);
            where[all[i]]=i;
        }

        for(i=1;i<=N/2;i++)
        {
            if(all[i]!=i)
            {
                x=i;
                y=where[i];
                if(N-x+1!=y)
                {
                    con++;
                    swap(all[x],all[y]);
                    where[all[x]]=x;
                    where[all[y]]=y;
                    ans.push_back(make_pair(x,y));
                    swap(all[N-x+1],all[N-y+1]);
                    where[all[N-x+1]]=N-x+1;
                    where[all[N-y+1]]=N-y+1;
                    if(all[N-i+1]!=N-i+1) break;
                }

            }
            else if(all[N-i+1]!=N-i+1) break;

        }
        for(i=1;i<=N/2;i++)
        {
            if(all[i]!=i)
            {
                x=i;
                y=where[i];
                if(x==N-y+1)
                {
                    if(how.empty()) how.push(i);
                    else
                    {
                        ans.push_back(make_pair(i,how.top()));

                        swap(all[i],all[how.top()]);
                        where[all[i]]=i;
                        where[all[how.top()]]=how.top();

                        swap(all[N-i+1],all[N-how.top()+1]);
                        where[all[N-i+1]]=N-i+1;
                        where[all[N-how.top()+1]]=N-how.top()+1;
                        how.pop();
                    }
                }


            }
        }
        for(i=1;i<=N/2;i++)
        {
            if(all[i]!=i)
            {
                x=i;
                y=where[i];
                if(N-x+1!=y)
                {
                    con++;
                    swap(all[x],all[y]);
                    where[all[x]]=x;
                    where[all[y]]=y;
                    ans.push_back(make_pair(x,y));
                    swap(all[N-x+1],all[N-y+1]);
                    where[all[N-x+1]]=N-x+1;
                    where[all[N-y+1]]=N-y+1;
                    if(all[N-i+1]!=N-i+1) break;
                }

            }
            else if(all[N-i+1]!=N-i+1) break;

        }
        con+=tt%2;
        for(i=1;i<=N;i++) if(all[i]!=i) ok=0;
        if(ok)
        {
            printf("%d %d\n",ans.size(),ans.size());
            for(auto i:ans) printf("%d %d\n",i.first,i.second);
        }
        else printf("-1\n");

    }
    return 0;
}

Compilation message

cat.cpp: In function 'int main()':
cat.cpp:107:22: warning: format '%d' expects argument of type 'int', but argument 2 has type 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wformat=]
  107 |             printf("%d %d\n",ans.size(),ans.size());
      |                     ~^       ~~~~~~~~~~
      |                      |               |
      |                      int             std::vector<std::pair<int, int> >::size_type {aka long unsigned int}
      |                     %ld
cat.cpp:107:25: warning: format '%d' expects argument of type 'int', but argument 3 has type 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wformat=]
  107 |             printf("%d %d\n",ans.size(),ans.size());
      |                        ~^               ~~~~~~~~~~
      |                         |                       |
      |                         int                     std::vector<std::pair<int, int> >::size_type {aka long unsigned int}
      |                        %ld
cat.cpp:15:24: warning: unused variable 'j' [-Wunused-variable]
   15 |     int T,x,y,ok=1,N,i,j,con=0,t,tt=0;
      |                        ^
cat.cpp:15:32: warning: variable 't' set but not used [-Wunused-but-set-variable]
   15 |     int T,x,y,ok=1,N,i,j,con=0,t,tt=0;
      |                                ^
cat.cpp:16:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   16 |     scanf("%d",&T);
      |     ~~~~~^~~~~~~~~
cat.cpp:23:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   23 |         scanf("%d",&N);
      |         ~~~~~^~~~~~~~~
cat.cpp:26:18: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   26 |             scanf("%d",&all[i]);
      |             ~~~~~^~~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Incorrect 9 ms 384 KB Wrong answer
# 결과 실행 시간 메모리 Grader output
1 Correct 31 ms 1020 KB Output is correct
2 Correct 30 ms 1024 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Incorrect 9 ms 384 KB Wrong answer
# 결과 실행 시간 메모리 Grader output
1 Correct 31 ms 1020 KB Output is correct
2 Correct 30 ms 1024 KB Output is correct
3 Correct 691 ms 15492 KB Output is correct
4 Correct 659 ms 14312 KB Output is correct
5 Correct 704 ms 17132 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Incorrect 9 ms 384 KB Wrong answer