今天是很神奇的一天
我没有分。。。。
原因是我a题卡了太久 以至于后面做疯了 然后 我做b题的时候炸了 所以b题后面一直在调试 也没有调试好 所以交的时候还在改题 越改越错越改越错 然后老板就开始评测了
所以可以说是今天CocaCola WA0了;
还有就是 今天告诉我了一个道理就是 千万要保存修改前的代码!!!!!
还有就是知识盲区不要等待,遇到不会的地方一定不要等待 没有a的题要背着写一遍!!!!! (flag已立)
A异或区间 | |
|
问题描述
何老板给你一个长度为的整数数列。
请你帮他找出满足下列条件的数字对的个数:
""表示“异或”,对应c++中的符号是"^"
输入格式
第一行,一个整数&N&
第二行,个空格间隔的整数
输出格式
一个整数,表示满足条件的数字对的个数
样例输入 1
4
2 5 4 6
样例输出 1
5
样例说明:满足条件的数字对有[1,1],[2,2],[3,3],[4,4],[1,2]
样例输入 2
19
885 8 1 128 83 32 256 206 639 16 4 128 689 32 8 64 885 969 1
样例输出 2
37
样例输入 3
9
0 0 0 0 0 0 0 0 0
样例输出 3
45
#include<stdio.h> #include<bits/stdc++.h> #include<cctype> using namespace std; long long a[200005],sum[200005],sx[200005],n,ans,l,r,j,mid; char buf[1<<20],*p1,*p2; #define GC (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<20,stdin),p1==p2)?0:*p1++) template<class T> inline void read(T &n){ char ch=GC;T w=1,x=0; while(!isdigit(ch)){if(ch=='-') w=-1;ch=GC;} while(isdigit(ch)){x=(x<<3)+(x<<1)+(ch^48);ch=GC;} n=x*w; } int check(int x){ l=x,r=n;j=x; while(l<=r) { mid=(l+r)/2; if((sum[mid]-sum[x-1])==(sx[mid]^sx[x-1]))l=mid+1,j=mid; else r=mid-1; } return j-x; } int main() { read(n); ans+=n; for(int i=1;i<=n;i++) { read(a[i]); sum[i]=sum[i-1]+a[i]; sx[i]=sx[i-1]^a[i]; } for(int i=1;i<=n;i++)ans+=check(i); printf("%lld",ans); }
b题老板说是板题 后来接之前考试的nonstop帮我的倍增代码搞
但是后来dfs出了问题 两个独立循环套在了一个函数里面 就一直没调出来 然后改错了 凉凉~~~~
B管辖 | ||
|
问题描述
何老板给你一棵树,树中共N个节点,编号1到N,1号点为根。
每个节点都有一个权值,其中第i个节点的权值为
树中共有N-1条边,每条边都有一定的长度,第i条边长度为 。
对于树中任意一点i,从i出发往根的路径中,距离i不超过的点,都可以管辖i号点。
何老板想知道,每个点管辖的点有多少个(不包括自己)。他拜托你帮忙计算一下。
输入格式
第一行,一个整数N,
第二行,N个空格间隔的整数,依次表示
接下来N-1行,每行两个整数描述一条边,其中第i行的两个整数 和 分别表示i+1号点的父亲节点为,与号点的边长为
输出格式
一行,N个整数,依次表示1到N号点管辖的节点数。
#include<bits/stdc++.h>
#include<cctype>
using namespace std;
long long x,y,la[200005],ne[200005],to[200005],cnt,fa[200005][21],c[200005],n,dis[200005][21],a[200005],w[200005];
char buf[1<<20],*p1,*p2;
#define GC (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<20,stdin),p1==p2)?0:*p1++)
template<class T> inline void read(T &n){
char ch=GC;T w=1,x=0;
while(!isdigit(ch)){if(ch=='-') w=-1;ch=GC;}
while(isdigit(ch)){x=(x<<3)+(x<<1)+(ch^48);ch=GC;}
n=x*w;
}
void add(int x,int y,int s){
ne[++cnt]=la[x];la[x]=cnt;to[cnt]=y;w[cnt]=s;
}
void dfs(int x){
for(int i=1;i<=20;i++){
dis[x][i]=dis[x][i-1]+dis[fa[x][i-1]][i-1];
fa[x][i]=fa[fa[x][i-1]][i-1];
}
for(int i=la[x];i;i=ne[i]){
int v