L1-1. N个数求和
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define rep(i,a,n) for(int i=a;i
#define per(i,a,n) for(int i=n-1;i>=a;i--)
#define pb push_back
using namespace std;
typedef vector<int> VI;
typedef long long ll;
const ll mod=1000000007;
const int N=2048;
int main()
{
int n;
ll t,ta,a1,tmp;
ll a[120],b[120];
scanf("%d",&n);
for(int i=0;iscanf("%lld/%lld",&a[i],&b[i]);
}
if(n>=1)
{
t=b[0];
for(int i=1;i0;
for(int i=0;iabs(ta),abs(t));
ta/=tmp;
t/=tmp;
if(ta<0&&a1!=0) {ta=-ta;}
if(a1==0&&ta!=0)
{
printf("%lld/%lld\n",ta,t);
}
else if(ta==0)
{
printf("%lld\n",a1);
}
else
{
printf("%lld %lld/%lld\n",a1,ta,t);
}
return 0;
}
L2-2. 树的遍历
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define rep(i,a,n) for(int i=a;i
#define per(i,a,n) for(int i=n-1;i>=a;i--)
#define pb push_back
using namespace std;
typedef vector<int> VI;
typedef long long ll;
const ll mod=1000000007;
const int N=2048;
struct node {
int n;
int l,r;
} p[N];
int n,a[50],b[50],tot;
vector<int>v;
int build(int l,int r,int l2,int r2) {
if(l>r||l2>r2) return -1;
int i,t,now;
now=tot;
tot++;
p[now].n=a[r2];
p[now].l=p[now].r=-1;
if(l==r) return now;
for(i=l; i<=r; i++) {
if(b[i]==a[r2]) break;
}
t=i-l;
p[now].l=build(l,i-1,l2,l2+t-1);
p[now].r=build(i+1,r,l2+t,r2-1);
return now;
}
int main() {
int n,rt,t;
scanf("%d",&n);
for(int i=0; iscanf("%d",&a[i]);
for(int i=0; iscanf("%d",&b[i]);
tot=0;
build(0,n-1,0,n-1);
queue<int>q;
v.clear();
q.push(0);
while(!q.empty()) {
t=q.front();
q.pop();
v.push_back(p[t].n);
if(p[t].l!=-1) q.push(p[t].l);
if(p[t].r!=-1) q.push(p[t].r);
}
for(int i=0; iif(i) printf(" ");
printf("%d",v[i]);
}
printf("\n");
return 0;
}
L3-004. 肿瘤诊断
#include
#include
#include
#include
#include
#include
using namespace std;
int dx[]= {1,-1,0,0,0,0};
int dy[]= {0,0,1,-1,0,0};
int dz[]= {0,0,0,0,1,-1};
int u[70][1300][130];
int a[70][1300][130];
struct node {
int x,y,z;
} p,w;
int m,n,l;
int bfs(int x,int y,int z) {
int num=0;
queueq;
p.x=x;
p.y=y;
p.z=z;
q.push(p);
while(!q.empty()) {
w=q.front();
num++;
q.pop();
for(int i=0; i<6; i++) {
p.x=w.x+dx[i];
p.y=w.y+dy[i];
p.z=w.z+dz[i];
if(p.x<0||p.x>=l||p.y<0||p.y>=m||p.z<0||p.z>=n) continue;
if(u[p.x][p.y][p.z]==1||a[p.x][p.y][p.z]==0) continue;
u[p.x][p.y][p.z]=1;
q.push(p);
}
}
return num;
}
int main() {
int t,ans;
scanf("%d%d%d%d",&m,&n,&l,&t);
for(int i=0; ifor(int j=0; jfor(int k=0; kscanf("%d",&a[i][j][k]);
memset(u,0,sizeof(u));
ans=0;
for(int i=0; ifor(int j=0; jfor(int k=0; kif(u[i][j][k]==0&&a[i][j][k]==1) {
u[i][j][k]=1;
int num=bfs(i,j,k);
if(num>=t)
ans+=num;
}
}
printf("%d\n",ans);
return 0;
}