Submission #02286


ソースコード

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
//long long使う
#include<bits/stdc++.h>
using namespace std;
#define INF (1<<29)//INF
#define F first
#define S second
#define VS vector<string>
#define VI vector<int>
#define REPI(i,s,n) for(int i=s;i<n;i++)//sからn未満の間iを回す
#define REPJ(j,s,n) for(int j=s;j<n;j++)//sからn未満の間iを回す
#define RREPI(i,s,n) for(int i=s;i>=n;i--)//sからn以下の間iを回す
#define RREPJ(j,s,n) for(int j=s;j>=n;j--)//sからn以下の間jを回す
#define ALL(a) a.begin(),a.end()//ソートとかに使える sort(ALL(vec))のように
#define SET(a,c) memset(a,c,sizeof(a));//aをc(0or1)で初期化する
#define DEBUGONE(x) cout<<#x<<" : "<<x<<endl;//デバックで一つの変数を表示
#define DEBUGTWO(x,y) cout<<#x<<" : "<<x<<" "<<#y<<" : "<<y<<endl;//デバックで二つの変数を表示
#define DEBUGTHREE(x,y,z) cout<<#x<<" : "<<x<<" "<<#y<<" : "<<y<<" "<<#z<<" : "<<z<<endl;//デバックで三つの変数を表示
#define OUTONE(x) cout<<x<<endl;//一つの変数を表示
#define OUTTWO(x,y) cout<<x<<" "<<y<<endl;//二つの変数を表示
#define OUTTHREE(x,y,z) cout<<x<<" "<<y<<" "<<z<<endl;//三つの変数を表示
typedef long long int64;
typedef pair<string,int> Psi;
typedef pair<int,int> Pii;
typedef pair<long long,int> Pli;
long long n,t,q;
Pli human[100005];
long long speak[100005]={0};
main(){
int left=0,right=0;
cin>>n>>t>>q;
for(int i=1;i<=n;i++){
cin>>human[i].F>>human[i].S;
if(human[i].S==2){
if(right!=0){
speak[i]=right;
}
}
else if(human[i].S==1){
right=i;
}
}
for(int i=n;i>=1;i--){
if(human[i].S==1){
if(left!=0){
speak[i]=left;
}
}
else if(human[i].S==2){
left=i;
}
}
long long num;
REPI(i,0,q){
cin>>num;
if(speak[num]==0){
if(human[num].S==1){
OUTONE((human[num].F+t));
}
else if(human[num].S==2){
OUTONE((human[num].F-t));
}
}
else if(speak[speak[num]]==num){//最初に止まる
if(labs((human[num].F-human[speak[num]].F)/2)<=t){
OUTONE((human[num].F+human[speak[num]].F)/2);
}
else{
if(human[num].S==1){
OUTONE((human[num].F+t));
}
else if(human[num].S==2){
OUTONE((human[num].F-t));
}
}
}
else{
long long point=(human[speak[speak[num]]].F+human[speak[num]].F)/2;
if(labs(human[num].F-point)<=t){
OUTONE(point);
}
else{
if(human[num].S==1){
OUTONE((human[num].F+t));
}
else if(human[num].S==2){
OUTONE((human[num].F-t));
}
}
}
}
}

ステータス

項目 データ
問題 0260 - JOI国のお散歩事情 (Walking in JOI Kingdom)
ユーザー名 ei1333
投稿日時 2015-12-14 15:35:57
言語 C++11
状態 Accepted
得点 5
ソースコード長 2674 Byte
最大実行時間 81 ms
最大メモリ使用量 2904 KB

セット

セット 得点 Cases
1 INPUT1 1 / 1 *in1.txt
2 INPUT2 1 / 1 *in2.txt
3 INPUT3 1 / 1 *in3.txt
4 INPUT4 1 / 1 *in4.txt
5 INPUT5 1 / 1 *in5.txt

テストケース

ファイル名 状態 実行時間 メモリ使用量 #
2016-yo-t4-in1.txt AC 13 ms 472 KB
1
2016-yo-t4-in2.txt AC 15 ms 560 KB
2
2016-yo-t4-in3.txt AC 59 ms 2840 KB
3
2016-yo-t4-in4.txt AC 81 ms 2772 KB
4
2016-yo-t4-in5.txt AC 80 ms 2904 KB
5
2016-yo-t4-in_s1.txt AC 11 ms 668 KB
2016-yo-t4-in_s2.txt AC 11 ms 508 KB