Codeforces Round #362 (Div. 2) A.B.C
2016-07-15 12:18
369 查看
A. Pineapple Incident
time limit per test
1 second
memory limit per test
256 megabytes
input
standard input
output
standard output
Ted has a pineapple. This pineapple is able to bark like a bulldog! At time t (in seconds) it barks for the first time. Then every s seconds after it, it barks twice with 1 second interval. Thus it barks at times t, t + s, t + s + 1, t + 2s, t + 2s + 1, etc.
代码
C. Lorenzo Von Matterhorn
time limit per test
1 second
memory limit per test
256 megabytes
input
standard input
output
standard output
Barney lives in NYC. NYC has infinite number of intersections numbered with positive integers starting from 1. There exists a bidirectional road between intersections i and 2i and another road between i and 2i + 1 for every positive integer i. You can clearly see that there exists a unique shortest path between any two intersections.
Initially anyone can pass any road for free. But since SlapsGiving is ahead of us, there will q consecutive events happen soon. There are two types of events:
1. Government makes a new rule. A rule can be denoted by integers v, u and w. As the result of this action, the passing fee of all roads on the shortest path from u to v increases by w dollars.
2. Barney starts moving from some intersection v and goes to intersection u where there's a girl he wants to cuddle (using his fake name Lorenzo Von Matterhorn). He always uses the shortest path (visiting minimum number of intersections or roads) between two intersections.
Government needs your calculations. For each time Barney goes to cuddle a girl, you need to tell the government how much money he should pay (sum of passing fee of all roads he passes).
Input
The first line of input contains a single integer q (1 ≤ q ≤ 1 000).
The next q lines contain the information about the events in chronological order. Each event is described in form 1 v u w if it's an event when government makes a new rule about increasing the passing fee of all roads on the shortest path from u to v by w dollars, or in form 2 v u if it's an event when Barnie goes to cuddle from the intersection v to the intersection u.
1 ≤ v, u ≤ 1018, v ≠ u, 1 ≤ w ≤ 109 states for every description line.
Output
For each event of second type print the sum of passing fee of all roads Barney passes in this event, in one line. Print the answers in chronological order of corresponding events.
Example
input
output
Note
In the example testcase:
Here are the intersections used:
Intersections on the path are 3, 1, 2 and 4.
Intersections on the path are 4, 2 and 1.
Intersections on the path are only 3 and 6.
Intersections on the path are 4, 2, 1 and 3. Passing fee of roads on the path are 32, 32 and 30 in order. So answer equals to32 + 32 + 30 = 94.
Intersections on the path are 6, 3 and 1.
Intersections on the path are 3 and 7. Passing fee of the road between them is 0.
Intersections on the path are 2 and 4. Passing fee of the road between them is 32 (increased by 30 in the first event and by 2 in the second).
题意:给你一颗二叉树;q个询问;
1:在u->v经过的线段+权值;
2:询问u->v的总权值;
思路:利用map标记;有点类似求lca的过程;
time limit per test
1 second
memory limit per test
256 megabytes
input
standard input
output
standard output
Ted has a pineapple. This pineapple is able to bark like a bulldog! At time t (in seconds) it barks for the first time. Then every s seconds after it, it barks twice with 1 second interval. Thus it barks at times t, t + s, t + s + 1, t + 2s, t + 2s + 1, etc.
#include <iostream> #include <cstdio> #include <cmath> #include <string> #include <cstring> #include <algorithm> #include <queue> #include <map> #include <set> #include <stack> #include <sstream> #include <vector> #define PI acos(-1.0) const int inf = (1<<30) - 10; using namespace std; inline int get_int() { int r=0; char c; while((c=getchar())!=' '&&c!='\n') r=r*10+c-'0'; return r; } inline void out(int x) { if(x>10) { out(x/10); } putchar(x % 10 + '0'); putchar('\n'); } /****************************************/ char a[500],b[500],c[500],d[500]; int xiao(int xx,int yy){return xx<yy?xx:yy;} int main() { int aa,dd,bb,l,n,i,j,xx; cin>>c; n=strlen(c); aa=c[0]-'0'; for(j=0,i=2;i<n;i++,j++){ if(c[i]=='e') break; d[j]=c[i]; } bb=0; for(j=0,i++;i<n;i++,j++) bb=bb*10+c[i]-'0'; //aa=strlen(a); //bb=strlen(b); dd=strlen(d); l=0; if(aa) printf("%d",aa); l=aa; xx=xiao(bb,dd); for(i=0;i<xx;i++){ if(l==0&&d[i]=='0') continue; printf("%c",d[i]); l=1; } if(xx==dd){ for(i=dd;i<bb;i++) printf("0"); } else{ if(l==0) printf("0"); l=0; for(int i=xx;i<dd;i++){ if(d[i]>'0'){ l=1; break; } } if(l){ printf("."); for(i=xx;i<dd;i++) printf("%c",d[i]); } } printf("\n"); }
代码
C. Lorenzo Von Matterhorn
time limit per test
1 second
memory limit per test
256 megabytes
input
standard input
output
standard output
Barney lives in NYC. NYC has infinite number of intersections numbered with positive integers starting from 1. There exists a bidirectional road between intersections i and 2i and another road between i and 2i + 1 for every positive integer i. You can clearly see that there exists a unique shortest path between any two intersections.
Initially anyone can pass any road for free. But since SlapsGiving is ahead of us, there will q consecutive events happen soon. There are two types of events:
1. Government makes a new rule. A rule can be denoted by integers v, u and w. As the result of this action, the passing fee of all roads on the shortest path from u to v increases by w dollars.
2. Barney starts moving from some intersection v and goes to intersection u where there's a girl he wants to cuddle (using his fake name Lorenzo Von Matterhorn). He always uses the shortest path (visiting minimum number of intersections or roads) between two intersections.
Government needs your calculations. For each time Barney goes to cuddle a girl, you need to tell the government how much money he should pay (sum of passing fee of all roads he passes).
Input
The first line of input contains a single integer q (1 ≤ q ≤ 1 000).
The next q lines contain the information about the events in chronological order. Each event is described in form 1 v u w if it's an event when government makes a new rule about increasing the passing fee of all roads on the shortest path from u to v by w dollars, or in form 2 v u if it's an event when Barnie goes to cuddle from the intersection v to the intersection u.
1 ≤ v, u ≤ 1018, v ≠ u, 1 ≤ w ≤ 109 states for every description line.
Output
For each event of second type print the sum of passing fee of all roads Barney passes in this event, in one line. Print the answers in chronological order of corresponding events.
Example
input
7 1 3 4 30 1 4 1 2 1 3 6 8 2 4 3 1 6 1 40 2 3 7 2 2 4
output
94 0 32
Note
In the example testcase:
Here are the intersections used:
Intersections on the path are 3, 1, 2 and 4.
Intersections on the path are 4, 2 and 1.
Intersections on the path are only 3 and 6.
Intersections on the path are 4, 2, 1 and 3. Passing fee of roads on the path are 32, 32 and 30 in order. So answer equals to32 + 32 + 30 = 94.
Intersections on the path are 6, 3 and 1.
Intersections on the path are 3 and 7. Passing fee of the road between them is 0.
Intersections on the path are 2 and 4. Passing fee of the road between them is 32 (increased by 30 in the first event and by 2 in the second).
题意:给你一颗二叉树;q个询问;
1:在u->v经过的线段+权值;
2:询问u->v的总权值;
思路:利用map标记;有点类似求lca的过程;
#include<bits/stdc++.h> using namespace std; #define ll __int64 #define mod 1000000007 #define esp 0.00000000001 const int N=2e5+10,M=1e6+10,inf=1e9; map<ll,ll>m; ll check(ll x) { ll sum=0; while(x) { sum++; x>>=1; } return sum; } void update(ll u,ll v,ll w) { while(check(u)>check(v)) { m[u]+=w; u/=2; } while(check(u)<check(v)) { m[v]+=w; v/=2; } while(check(u)!=1&&u!=v) { m[v]+=w; m[u]+=w; v>>=1; u>>=1; } } ll query(ll u,ll v) { ll ans=0; while(check(u)>check(v)) { ans+=m[u]; u/=2; } while(check(u)<check(v)) { ans+=m[v]; v/=2; } while(check(u)!=1&&u!=v) { ans+=m[v]; ans+=m[u]; v>>=1; u>>=1; } return ans; } int main() { ll x,y,z,i,t; scanf("%I64d",&x); for(i=0;i<x;i++) { ll flag,u,v; scanf("%I64d%I64d%I64d",&flag,&u,&v); if(flag==1) { ll w; scanf("%I64d",&w); update(u,v,w); } else { printf("%I64d\n",query(u,v)); } } return 0; }
相关文章推荐
- 分页查询优化
- Android面试一天一题(2)优雅地介绍自己的项目
- ServletContextListener 接口
- 【旧代码整理】uri路由处理部分
- 打印蛇形矩阵
- mysql 日期操作 增减天数、时间转换、时间戳
- POP3反复弹框问题
- MediBang Paint Pro超级精简版/超精简/懂你版
- hrbust 1186 青蛙过河【Dp】
- React组件的生命周期
- Exchange Server 2010 管理控制台初始化失败
- 腾讯优测干货精选| 安卓开发新技能Get -常用必备小工具汇总
- rtsp摘要认证协议(Response计算方法)
- stringbuffer与stringbuilder的区别
- 初识STL
- 金庸笔下的"程序员"
- 学习计划与方法
- 通过OWA修改密码,提示输入的密码不符合最低安全要求
- python的加密模块(md5,sha,crypt)学习
- POJ2456