#pragma comment(linker, "/STACK:102c000000,102c000000")
#include <iostream>
#include <cstdio>
#include <cstring>
#include <sstream>
#include <string>
#include <algorithm>
#include <list>
#include <map>
#include <vector>
#include <queue>
#include <stack>
#include <cmath>
#include <cstdlib>
// #include <conio.h>
using namespace std;
#define clc(a,b) memset(a,b,sizeof(a))
#define inf 0x3f3f3f3f
#define lson l,mid,rt<<1
#define rson mid+1,r,rt<<1|1
const int N = *1e6+;
const int MOD = 1e9+;
#define LL long long
#define mi() (l+r)>>1
double const pi = acos(-); void fre() {
freopen("in.txt","r",stdin);
} // inline int r() {
// int x=0,f=1;char ch=getchar();
// while(ch>'9'||ch<'0') {if(ch=='-') f=-1;ch=getchar();}
// while(ch>='0'&&ch<='9') { x=x*10+ch-'0';ch=getchar();}return x*f;
// }
int main(){
int t,s,x;
cin>>t>>s>>x;
bool flag=false;
if(x<t) puts("NO"),exit();
if(((x-t)%s==)||((x-t-)%s==&&x-t-!=)) flag=true;
if(flag) puts("YES");
else puts("NO");
return ;
}
和上场有道差不多
// #pragma comment(linker, "/STACK:102c000000,102c000000")
#include <iostream>
#include <cstdio>
#include <cstring>
#include <sstream>
#include <string>
#include <algorithm>
#include <list>
#include <map>
#include <vector>
#include <queue>
#include <stack>
#include <cmath>
#include <cstdlib>
// #include <conio.h>
using namespace std;
#define clc(a,b) memset(a,b,sizeof(a))
#define inf 0x3f3f3f3f
#define lson l,mid,rt<<1
#define rson mid+1,r,rt<<1|1
const int N = 1e7+;
const int MOD = 1e9+;
#define LL long long
#define mi() (l+r)>>1
double const pi = acos(-); void fre() {
freopen("in.txt","r",stdin);
} // inline int r() {
// int x=0,f=1;char ch=getchar();
// while(ch>'9'||ch<'0') {if(ch=='-') f=-1;ch=getchar();}
// while(ch>='0'&&ch<='9') { x=x*10+ch-'0';ch=getchar();}return x*f;
// } int main(){
string s;
int l=;
cin>>s;
int pos=s.find('e');
// cout<<pos<<endl;
for(int j=pos+;j<=s.size()-;j++){
l=s[j]-''+l*;
}
// cout<<l<<endl;
string str="";
int pos2=s.find('.');
// cout<<pos2<<endl;
for(int i=;i<pos2;i++){
str+=s[i];
// cout<<str<<endl;
if(str[]==''||l==){
str+='.';
}
}
for(int i=pos2+;i<pos;i++){
str+=s[i];
if(i-pos2==l)
str+='.';
}
if(l>pos-pos2-){
for(int i=;i<l-pos+pos2+;i++){
str+='';
}
}
if(str.find('.')!=-){
while(str.back()=='.'||str.back()=='') str.pop_back();
}
if(str=="")
str='';
if(l==){
cout<<str<<endl;
exit();
}
int p=;
for(int i=;i<(int)str.size();i++){
if(str[i]!=''&&str[i]!='.'){
p=i;
break;
}
}
for(int i=p;i<(int)str.size();i++){
cout<<str[i];
}
cout<<endl;
return ;
}
题意:完全二叉树 q次询问,op=1时,在x到y的最短边上c,op=2,输出x到y的权值和
思路:应为是完全二叉树,直接暴力每条边,加上权值,用mp存当前点到父亲的权值
// #pragma comment(linker, "/STACK:102c000000,102c000000")
#include <iostream>
#include <cstdio>
#include <cstring>
#include <sstream>
#include <string>
#include <algorithm>
#include <list>
#include <map>
#include <vector>
#include <queue>
#include <stack>
#include <cmath>
#include <cstdlib>
// #include <conio.h>
using namespace std;
#define clc(a,b) memset(a,b,sizeof(a))
#define inf 0x3f3f3f3f
#define lson l,mid,rt<<1
#define rson mid+1,r,rt<<1|1
const int N = 1e7+;
const int MOD = 1e9+;
#define LL long long
#define mi() (l+r)>>1
double const pi = acos(-); void fre() {
freopen("in.txt","r",stdin);
} // inline int r() {
// int x=0,f=1;char ch=getchar();
// while(ch>'9'||ch<'0') {if(ch=='-') f=-1;ch=getchar();}
// while(ch>='0'&&ch<='9') { x=x*10+ch-'0';ch=getchar();}return x*f;
// }
map<LL,LL>mp;
void add(LL x,LL y,LL c){
while(x!=y){
if(x>y) swap(x,y);
mp[y]+=c;
y>>=;
}
} LL Sum(LL x,LL y){
LL sum=;
while(x!=y){
if(x>y) swap(x,y);
sum+=mp[y];
y>>=;
}
return sum;
}
int main(){
// fre();
int T;
scanf("%d",&T);
mp.clear();
while(T--){
int op;
LL x,y,c;
scanf("%d",&op);
if(op==){
scanf("%I64d%I64d%I64d",&x,&y,&c);
add(x,y,c);
}
else{
scanf("%I64d%I64d",&x,&y);
LL ans=Sum(x,y);
printf("%I64d\n",ans);
}
}
return ;
}
题意:n个节点,n-1个数,pi是i+1的父亲。问每个点的在随机DFS中访问次数的期望
题意:理解什么是随机dfs访问期望就简单了:非当前点的父亲节点和子孙节点的点,出现在该点的前后概率均为0.5;
所以dp[i]=dp[f]+1+0.5*(nodes[f]-nodes[i]-1);
f:i的父亲
nodes[]:i为根的树所含节点总数
所以,先处理每个点的子孙节点总数,再dp
对于当前点来说,父亲一定在dfs之前出现,所以次数+1,子孙不算,其余点要么在前要么在后,因此次数+0.5
// #pragma comment(linker, "/STACK:102c000000,102c000000")
#include <iostream>
#include <cstdio>
#include <cstring>
#include <sstream>
#include <string>
#include <algorithm>
#include <list>
#include <map>
#include <vector>
#include <queue>
#include <stack>
#include <cmath>
#include <cstdlib>
// #include <conio.h>
using namespace std;
#define clc(a,b) memset(a,b,sizeof(a))
#define inf 0x3f3f3f3f
#define lson l,mid,rt<<1
#define rson mid+1,r,rt<<1|1
const int N = 1e5+;
const int MOD = 1e9+;
#define LL long long
#define mi() (l+r)>>1
double const pi = acos(-); void fre() {
freopen("in.txt","r",stdin);
} // inline int r() {
// int x=0,f=1;char ch=getchar();
// while(ch>'9'||ch<'0') {if(ch=='-') f=-1;ch=getchar();}
// while(ch>='0'&&ch<='9') { x=x*10+ch-'0';ch=getchar();}return x*f;
// }
vector<int>g[N];
int nodes[N];
double dp[N];
int pre[N];
int dfs(int f){
if(g[f].size()==){
return nodes[f]=;
}
for(int i=;i<g[f].size();i++){
int v=g[f][i];
dfs(v);
nodes[f]+=nodes[v];
}
nodes[f]++;
} double DP(int f){
if(g[f].size()==){
return ;
}
for(int i=;i<g[f].size();i++){
int v=g[f][i];
dp[v]=dp[f]++0.5*(nodes[f]-nodes[v]-);
DP(v);
}
}
int main(){
fre();
int n;
scanf("%d",&n);
pre[]=-;
for(int i=;i<=n+;i++) g[i].clear();
for(int i=;i<=n;i++){
int x;
scanf("%d",&x);
if(x==i) continue;
g[x].push_back(i);
pre[i]=x;
}
dfs();
dp[]=1.0;
DP();
for(int i=;i<n;i++){
printf("%.1lf ",dp[i]);
}
printf("%.1lf\n",dp[n]);
return ;
}