L1-1. N个数求和
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <vector>
#include <queue>
#include <set>
#include <map>
#include <string>
#include <math.h>
#include <stdlib.h>
#include <time.h>
#define rep(i,a,n) for(int i=a;i<n;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;i<n;i++)
{
scanf("%lld/%lld",&a[i],&b[i]);
}
if(n>=1)
{
t=b[0];
for(int i=1;i<n;i++)
t=t*b[i]/__gcd(b[i],t);
ta=0;
for(int i=0;i<n;i++)
{
ta+=t/b[i]*a[i];
}
}
a1=ta/t;
ta=ta%t;
tmp=__gcd(abs(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 <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <vector>
#include <queue>
#include <set>
#include <map>
#include <string>
#include <math.h>
#include <stdlib.h>
#include <time.h>
#define rep(i,a,n) for(int i=a;i<n;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; i<n; i++)
scanf("%d",&a[i]);
for(int i=0; i<n; i++)
scanf("%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; i<v.size(); i++) {
if(i) printf(" ");
printf("%d",v[i]);
}
printf("\n");
return 0;
}
L3-004. 肿瘤诊断
#include<cstdio>
#include<cstring>
#include<vector>
#include<iostream>
#include<algorithm>
#include<queue>
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;
queue<node>q;
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; i<l; i++)
for(int j=0; j<m; j++)
for(int k=0; k<n; k++)
scanf("%d",&a[i][j][k]);
memset(u,0,sizeof(u));
ans=0;
for(int i=0; i<l; i++)
for(int j=0; j<m; j++)
for(int k=0; k<n; k++) {
if(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;
}