Day8T3
充分发扬人类智慧,发现可以使用如下方式构造:
实际上这就是题解了。
#include"plus.h"
#include<bits/stdc++.h>
using namespace std;
void sol(int n){
if(n==3){
Report(1,2,3);
}
else if(n==12){
Report(1,11,12);
Report(3,7,10);
Report(4,5,9);
Report(2,6,8);
}
else if(n==15){
Report(1,14,15);
Report(3,10,13);
Report(4,8,12);
Report(5,6,11);
Report(2,7,9);
}
else if(n%3==0){
if(n*(long long)(n+1)/2%2) sol(n-2);
else{
int k = n/3;
if(n&1){
for(int i=k/2;i>=1;i--) Report(k-i-i+1,i+k,k-i+1+k);
Report((k-9)/4+(k-1)/4+k-k/2+2,k+k/2+1,(k-9)/4+(k-1)/4+k+k+3);
Report((k-9)/4+(k-1)/4+1,k+k+1,k+k+(k-9)/4+(k-1)/4+2);
for(int i=1;i<=(k-9)/4;i++) Report(3+(k-9)/4*2-i-i,k+k+(k-1)/4+1+i,k+k+(k-1)/4+4+(k-9)/4*2-i);
Report(1,k+k+(k-1)/4+4+(k-9)/4*2,k+k+(k-1)/4+5+(k-9)/4*2);
for(int i=1;i<=k-k/2-3-(k-9)/4;i++) Report(n-k-k-i-i,k+k+1+i,n-i+1);
}
else{
for(int i=k/2;i>=1;i--) Report(k-i*2+2,i+k,k-i+2+k);
Report(k+k/4*2-k/2-1,k+k/2+1,k+k+k/4*2);
Report(k/4*2-1,k+k+2,k+k+k/4*2+1);
for(int i=1;i<=k/4-2;i++) Report(k/4*2-i-i-1,k+k+k/4+i+1,k+k+k/4*3-i);
Report(1,k+k+k/4*3,k+k+k/4*3+1);
for(int i=1;i<=k-k/2-1-k/4;i++) Report(n-k-k-i-i-1,k+k+2+i,n-i+1);
}
}
}
else if(n%3==2) sol(n-1);
else{
int ptr1 = (n/3+1)/2+1+n/3,ptr2 = n-n/3/2+1;
for(int i=1;i<=n/3;i++){
Report(i,ptr1-i,ptr1);
ptr1++;
swap(ptr1,ptr2);
}
}
}
void Cut(int N){
sol(N);
}

浙公网安备 33010602011771号