题目来源:
CSUOJ 2299: Skinny Polygon
Codeforces Gym - 101158 I - Skinny Polygon
#include <iostream>
#include <iomanip>
#include <stdio.h>
#include <string.h>
#include <cmath>
#include <algorithm>
#include <vector>
#include <set>
#include <map>
#include <stack>
#include <queue>
#include <cctype>
#include <sstream>
#define LL long long
#define LD long double
#define ULL unsigned long long
#define UI unsigned int
#define _for(i,j,k) for(int i=j;i<=k;i++)
#define for_(i,j,k) for(int i=j;i>=k;i--)
#define lowbit(x) (x&-x)
#define ls(x) x<<1
#define rs(x) x<<1|1
//#pragma comment(linker, "/STACK:10240000000,10240000000")
using namespace std;
const int maxn = 1e5+5;
int t;
void extgcd(LL a,LL b,LL& d,LL& x,LL& y){
if(!b){
d=a;x=1;y=0;
}
else{
extgcd(b,a%b,d,y,x);
y-=x*(a/b);
}
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
LL a,b,d,x,y;
cin>>t;
while(t--){
cin>>a>>b;
extgcd(a,-b,d,y,x);
if(d<0) d=-d;
if(d<=50000){
cout<<"3\n0 0\n";
cout<<x<<" "<<y<<"\n";
cout<<a<<" "<<b<<"\n";
}
else{
cout<<"4\n0 0\n";
cout<<a<<" "<<b-1<<"\n";
cout<<a/d<<" "<<b/d<<"\n";
cout<<a-1<<" "<<b<<"\n";
}
}
return 0;
}