Codeforces 라운드 # 576 (사업부 2.) A - 도시의 날

Codeforces 라운드 # 576 (사업부. 2)

 

A - 도시의 날

년 동안, 도시 N의 날 여름의 가장 비오는 날에 개최되었다. 새로운 시장이 전통을 파괴하고 선택하기로 결정  그리 비가 오는 축하에 대한 일을. 시장은 여름의 N 일에 대한 예측 날씨를 알고있다. i 번째 날, 비가 밀리미터가 떨어질 인공 지능. 모든 값은 별개 인공 지능.

시장은 시민들이 축하와 후 Y 일 전에 기상 X 일을 볼 것이라는 점을 알고있다. 그 때문에 그는 하루 DIS 말한다  - 그래서 - 비오는없는  광고가 비 d 날 이전에 X 일의 각의 양 및 하루 D 후, y를 일의 각보다 작은 경우. 즉, 광고가 <AJ 모든 D-x≤j <D 및 D <j≤d + Y 대해 유지한다. 시민은 여름 날씨를보고, 그래서 우리는 1≤j≤n 같은 J를 고려한다.

도움말 시장은 찾을  초기  그리 비오는  여름 날.

입력

여름에 일의 수, 일 시민의 수는 행사 전에 날씨와 일의 수를보고 - 첫 번째 라인은 N, x와 y (1≤n≤100000, 0≤x는 y≤7) 세 개의 정수를 포함 그들은 후에 그렇게.

두 번째 행은 N 개의 별개의 정수 (A1), (A2)를, ..., 포함 된 AI는 i 번째 날에 비 량을 나타낸다 (1≤ai≤10 ^ 9).

산출

최초의 인덱스 - 단일 정수 인쇄  그리 비오는  여름 날. 우리는 대답은 항상 존재 함을 표시 할 수 있습니다.

입력

10 2

9 10 6 7 8 1 2 3 4 5

산출

입력

10 (2) (3)

9 10 6 7 8 1 2 3 4 5

산출

8

입력

5 5 5

100,000 10,000 1,000 100 10

산출

5

노트

첫 번째 예제 일에서 3, 8은  그리 비오는 . 3 번째 일 이전이다.

두 번째 예에서는 3 일 아니다  그다지없는 비가 3 + Y = 6 때문에 A3> A6. 따라서, 하루 8 대답이다. 그 8 + y를 = 11 참고하지만, 여름이 아니기 때문에 우리는 하루 11 고려하지 않습니다.

 

제목의 의미 : 제목이 의미 당신 N 강우량의 일 및 X하는 Y

첫날 강우량이 일 강우량보다 큰 이전과 강우량의 비 y를 일의 X 일 이후에 충족하도록 요청.

아이디어 : 직접 각 지점의 전면에서 당신은 자격이 가능한 솔루션을 찾을 때까지 수를 x와 y 1의 수를 열거 N, 처음 몇 일의 첫 번째 출력됩니다.

국경의 X 또는 Y 번호를 찾고 앞의 숫자는 건너 뛸 경우 가능한 솔루션에 영향을 미치는,하지만 실현 가능한 해결책을 준수하지 않는 강우에 영향을주지 않습니다이다 구덩이가있다.

 

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cmath>
 4 #include<cstring>
 5 #include<map>
 6 #include<set>
 7 #include<vector>
 8 #include<algorithm>
 9 #include<queue>
10 #include<unordered_map>
11 #include<list>
12 using namespace std;
13 #define ll long long 
14 const int mod=1e9+7;
15 const int inf=1e9+7;
16  
17 const int maxn=1e5+5;
18  
19 int num[maxn];
20  
21 int main()
22 {
23     ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
24     
25     int n,x,y;
26     
27     while(cin>>n>>x>>y)
28     {
29         memset(num,0,sizeof(num));
30         
31         for(int i=1;i<=n;i++)
32             cin>>num[i];
33         
34         for(int i=1;i<=n;i++)//枚举1到n是否为可行解 
35         {
36             int now=i;//当前i
37             
38             int flag=0;
39             for(int j=now-1;j>=now-x&&j>=1;j--)//向前枚举x个, 
40             {
41                 if(num[j]<num[now])//不符合刷新flag 
42                 {
43                     flag=1;
44                     break;
45                 }
46             }
47             
48             if(flag==1)//已经不符合,不用再枚举后y个,直接退出 
49                 continue;
50             
51             for(int j=now+1;j<=now+y&&j<=n;j++)//枚举后y个 
52             {
53                 if(num[j]<num[now])//不符合刷新flag 
54                 {
55                     flag=1;
56                     break;
57                 }
58             }
59             
60             if(flag==0)
61             {
62                 cout<<now<<endl;//输出最优解 
63                 break;
64             }
65         
66         }
67         
68     }
69     
70     return 0;
71 }

 

추천

출처www.cnblogs.com/xwl3109377858/p/11286155.html