제출 #152284

#제출 시각아이디문제언어결과실행 시간메모리
152284tinjyu정렬하기 (IOI15_sorting)C++14
100 / 100
388 ms34396 KiB
#include "sorting.h" #include <iostream> using namespace std; long long int p[200005],b[200005],n,s[200005],m,x[2000005],y[2000005],a[2000005][2],t; int check(int sum) { //cout<<sum<<endl; for(int i=0;i<n;i++) { b[s[i]]=i; p[i]=s[i]; } for(int i=0;i<sum;i++) { swap(b[p[x[i]]],b[p[y[i]]]); swap(p[x[i]],p[y[i]]); } int tmp=0; int tmp2[2000005][2],now=-1; for(int i=0;i<m;i++) { tmp2[i][0]=0; tmp2[i][1]=0; } for(int i=0;i<n;i++) { if(b[i]!=i) { now++; tmp++; int x1=i,y1=p[i]; tmp2[now][0]=x1,tmp2[now][1]=y1; swap(p[b[i]],p[i]); swap(b[x1],b[y1]); } /*for(int j=0;j<n;j++)cout<<p[j]<<" "; cout<<endl; for(int j=0;j<n;j++)cout<<b[j]<<" "; cout<<endl; cout<<endl;*/ } if(tmp<=sum){ //cout<<endl; for(int i=0;i<sum;i++) { a[i][0]=tmp2[i][0]; a[i][1]=tmp2[i][1]; } return 1; } else return 0; } int findSwapPairs(int N, int S[], int M, int X[], int Y[], int P[], int Q[]) { n=N,m=M; for(int i=0;i<n;i++)x[i]=X[i]; for(int i=0;i<n;i++)y[i]=Y[i]; for(int i=0;i<n;i++)s[i]=S[i]; int l=0,r=n,ans; while(l<=r) { int mid=(l+r)/2; //cout<<l<<" "<<r<<" "<<mid<<endl; if(check(mid)==1) { ans=mid; r=mid-1; } else l=mid+1; //system("pause"); } //cout<<ans<<endl; for(int i=0;i<n;i++) { b[s[i]]=i; p[i]=s[i]; } for(int i=0;i<ans;i++) { swap(b[p[x[i]]],b[p[y[i]]]); swap(p[x[i]],p[y[i]]); P[i]=b[a[i][0]]; Q[i]=b[a[i][1]]; swap(b[p[P[i]]],b[p[Q[i]]]); swap(p[P[i]],p[Q[i]]); } return ans; }

컴파일 시 표준 에러 (stderr) 메시지

sorting.cpp: In function 'int check(int)':
sorting.cpp:34:19: warning: conversion to 'int' from 'long long int' may alter its value [-Wconversion]
    int x1=i,y1=p[i];
                ~~~^
sorting.cpp: In function 'int findSwapPairs(int, int*, int, int*, int*, int*, int*)':
sorting.cpp:61:15: warning: conversion to 'int' from 'long long int' may alter its value [-Wconversion]
     int l=0,r=n,ans;
               ^
sorting.cpp:85:17: warning: conversion to 'int' from 'long long int' may alter its value [-Wconversion]
   P[i]=b[a[i][0]];
        ~~~~~~~~~^
sorting.cpp:86:17: warning: conversion to 'int' from 'long long int' may alter its value [-Wconversion]
   Q[i]=b[a[i][1]];
        ~~~~~~~~~^
sorting.cpp:61:17: warning: 'ans' may be used uninitialized in this function [-Wmaybe-uninitialized]
     int l=0,r=n,ans;
                 ^~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...