点击查看代码
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e3+10;
int n,bx,by;
bool check(int l,int r,int u,int d)
{
if(l<=1||l>=n) return false;
if(r<=1||r>=n) return false;
if(u<=1||u>=n) return false;
if(d<=1||d>=n) return false;
return true;
}
struct node
{
int r,c,h,w;
void print()
{
printf("%d %d %d %d\n",r,c,h,w);
}
};
void solve()
{
printf("Yes\n");
scanf("%d%d%d",&n,&bx,&by);
int l=by,r=by,u=bx,d=bx;
vector<node> ans;
while(check(l,r,u,d))
{
l--,r++,d++,u--;
int ri,ci,hi,wi;
int rii,cii,hii,wii;
ri=d,ci=r,hi=u-d+1,wi=l-r;
rii=u,cii=l,hii=d-u-1,wii=r-l;
ans.push_back((node){ri,ci,hi,wi});
ans.push_back((node){rii,cii,hii,wii});
}
//cout<<u<<" "<<d<<" "<<l<<" "<<r<<endl;
if(u==1)
{
int k=1;
for(int i=l-1;i>0;i--,k++)
{
int ri,ci,hi,wi;
ci=i,ri=d+k;
hi=1-d-k,wi=r-i;
ans.push_back((node){ri,ci,hi,wi});
}
for(int i=r+1;i<=n;i++,k++)
{
int ri,ci,hi,wi;
ci=i,ri=d+k;
hi=1-d-k,wi=1-i;
ans.push_back((node){ri,ci,hi,wi});
}
}
else if(l==1)
{
int k=1;
for(int i=u-1;i>0;i--,k++)
{
int ri,ci,hi,wi;
ri=i,ci=r+k;
hi=d-ri,wi=1-r-k;
ans.push_back((node){ri,ci,hi,wi});
}
for(int i=d+1;i<=n;i++,k++)
{
int ri,ci,hi,wi;
ri=i,ci=r+k;
hi=1-ri,wi=1-r-k;
ans.push_back((node){ri,ci,hi,wi});
}
}
else if(d==n)
{
int k=1;
for(int i=l-1;i>0;i--,k++)
{
int ri,ci,hi,wi;
ci=i,ri=u-k;
hi=n-ri,wi=r-i;
ans.push_back((node){ri,ci,hi,wi});
}
for(int i=r+1;i<=n;i++,k++)
{
int ri,ci,hi,wi;
ci=i,ri=u-k;
hi=n-ri,wi=1-i;
ans.push_back((node){ri,ci,hi,wi});
}
}
else if(r==n)
{
int k=1;
for(int i=u-1;i>0;i--,k++)
{
int ri,ci,hi,wi;
ri=i,ci=l-k;
hi=d-ri,wi=n-ci;
ans.push_back((node){ri,ci,hi,wi});
}
for(int i=d+1;i<=n;i++,k++)
{
int ri,ci,hi,wi;
ri=i,ci=l-k;
hi=1-ri,wi=n-ci;
ans.push_back((node){ri,ci,hi,wi});
}
}
printf("%d\n",ans.size());
vector<node>::iterator it;
for(it=ans.begin();it!=ans.end();it++)
{
node ansi=*it;
ansi.print();
}
}
int main()
{
int t=1;//scanf("%d",&t);
while(t--) solve();
return 0;
}
点击查看代码
#include <bits/stdc++.h>
using namespace std;
int main() {
int n, i, j; scanf("%d%d%d", &n, &i, &j);
// UDLR 表示现在包出来的正方形的上下左右边界
int U = i, D = i;
int L = j, R = j;
printf("Yes\n%d\n", n - 1);
for (int k = 1; k < n; k++) {
if (U > 1 && L > 1) {
U--; L--;
printf("%d %d %d %d\n", U, L, D - U, R - L);
} else if (U > 1 && R < n) {
U--; R++;
printf("%d %d %d %d\n", U, R, D - U, L - R);
} else if (D < n && L > 1) {
D++; L--;
printf("%d %d %d %d\n", D, L, U - D, R - L);
} else {
D++; R++;
printf("%d %d %d %d\n", D, R, U - D, L - R);
}
}
return 0;
}