2018-ACetic_ACid/AugTrain-04/G
从 Trac 迁移的文章
这是从旧校内 Wiki 迁移的文章,可能存在一些样式问题,您可以向 memset0 反馈。
原文章内容如下:
{{{
#include <bits/stdc++.h>
using namespace std;
#define N 120
struct point{
int x,y;
point(int x=0,int y=0):x(x),y(y){}
point operator + (const point &c) const { return point(x+c.x,y+c.y); }
};
struct chip{
vector<point> a;
chip()
{
a.clear();
}
void init()
{
a.clear();
a.push_back(point(1,1));
}
chip operator + (chip const &c) const{
static chip ans;
static point t;
ans=*this;
t=a[a.size()-1]; t.y--;
cerr<<t.x<<" "<<t.y<<endl;
for(int i=0;i<c.a.size();i++)
ans.a.push_back(c.a[i]+t);
return ans;
}
chip operator | (chip const &c) const{
static chip ans;
static point t1,t2;
ans.a.clear();
t1=point(0,a[a.size()-1].y);
t2=point(c.a[c.a.size()-1].x,0);
ans.a.push_back(point(1,1));
for(int i=0;i<a.size();i++)
ans.a.push_back(a[i]+t2);
for(int i=0;i<c.a.size();i++)
ans.a.push_back(c.a[i]+t1);
ans.a.push_back(a[a.size()-1]+c.a[c.a.size()-1]);
return ans;
}
void print()
{
printf("%d\n",a.size()+2);
printf("0 1\n");
for(int i=0;i<a.size();i++)
{
printf("%d %d\n",a[i].x,a[i].y);
}
printf("%d %d\n",a[a.size()-1].x,a[a.size()-1].y+1);
}
}a[N];
int n,x,y;
char s[5];
int main()
{
freopen("grid.in","r",stdin);
freopen("grid.out","w",stdout);
a[0].init();
while(scanf("%d",&n),~n)
{
for(int i=1;i<=n;i++)
{
scanf("%s%d%d",s,&x,&y);
if(s[0]=='+')
a[i]=a[x]+a[y];
else
a[i]=a[x]|a[y];
}
a[n].print();
}
return 0;
}
}}}
#include <bits/stdc++.h>
using namespace std;
#define N 120
struct point{
int x,y;
point(int x=0,int y=0):x(x),y(y){}
point operator + (const point &c) const { return point(x+c.x,y+c.y); }
};
struct chip{
vector<point> a;
chip()
{
a.clear();
}
void init()
{
a.clear();
a.push_back(point(1,1));
}
chip operator + (chip const &c) const{
static chip ans;
static point t;
ans=*this;
t=a[a.size()-1]; t.y--;
cerr<<t.x<<" "<<t.y<<endl;
for(int i=0;i<c.a.size();i++)
ans.a.push_back(c.a[i]+t);
return ans;
}
chip operator | (chip const &c) const{
static chip ans;
static point t1,t2;
ans.a.clear();
t1=point(0,a[a.size()-1].y);
t2=point(c.a[c.a.size()-1].x,0);
ans.a.push_back(point(1,1));
for(int i=0;i<a.size();i++)
ans.a.push_back(a[i]+t2);
for(int i=0;i<c.a.size();i++)
ans.a.push_back(c.a[i]+t1);
ans.a.push_back(a[a.size()-1]+c.a[c.a.size()-1]);
return ans;
}
void print()
{
printf("%d\n",a.size()+2);
printf("0 1\n");
for(int i=0;i<a.size();i++)
{
printf("%d %d\n",a[i].x,a[i].y);
}
printf("%d %d\n",a[a.size()-1].x,a[a.size()-1].y+1);
}
}a[N];
int n,x,y;
char s[5];
int main()
{
freopen("grid.in","r",stdin);
freopen("grid.out","w",stdout);
a[0].init();
while(scanf("%d",&n),~n)
{
for(int i=1;i<=n;i++)
{
scanf("%s%d%d",s,&x,&y);
if(s[0]=='+')
a[i]=a[x]+a[y];
else
a[i]=a[x]|a[y];
}
a[n].print();
}
return 0;
}