Unfortunately, Ming comes to know that traffic control will be taking place in Beijing on some days during his n-day trip, and he won’t be able to visit any place in Beijing, including PKU, on a traffic control day. Ming loves Beijing and he wants to make sure that m days can be used to visit interesting places in Beijing. So Ming made a decision: spending k (m ≤ k ≤ n) consecutive days in Beijing is also acceptable if there are k - m traffic control days among those k days. Under this complicated situation, he doesn’t know how to make the best schedule. Please write a program to help Ming determine the best dates of the two days to visit Peking University. Data guarantees a unique solution.c++
输入数组
For each test case:this
The first line contains two integers, above mentioned n and m (2 ≤ n ≤ 100, 2 ≤ m ≤ n).spa
The second line contains n integers, above mentioned p[0] , p[1] , … p[n-1]. (0 ≤ p[i] ≤ 1000, i = 0 ... n-1)rest
The third line is an integer q (0 ≤ q ≤ n), representing the total number of traffic control days during the n-day trip, followed by q integers representing the dates of these days.code
输出orm
One line, including two integers a and b, representing the best dates for visiting PKU.ip
7 3
6 9 10 1 0 8 35
3 5 6 2
4 2
10 11 1 2
1 2
样例输出
0 3
1 3
第几天 | 0 | 1 | 2 | 3 | 4 | 5 | 6 |
排队时间 | 6 | 9 | 10 | 1 | 0 | 8 | 35 |
是否为交通管制日 | 否 |
否 | 是 | 否 | 否 | 是 | 是 |
#include<bits/stdc++.h> using namespace std; const int INF=0x3f3f3f3f; int Myfind(int a,int w[],int q) { int i; for(i=0;i<q;i++) { if(a==w[i])break; } if(i<q) return 1; else return 0; }//查找长度为q的数组w中是否有a元素 int main() { int n,m; while(cin>>n>>m) { int p[105]; for(int i=0;i<n;i++) { cin>>p[i]; } int q; cin>>q; int w[105]; for(int i=0;i<q;i++) { cin >> w[i]; } int k=n-1;//k表示要从第几天开始 for(int i=0;i<m;) { int res; res=Myfind(k,w,q); //cout << res <<endl ; if(res==1) k--; else {k--;i++;} } //cout <<endl<< k; int ans1,ans2; int summax=0x3f3f3f3f; for(int i=0;i<=k+1;i++) { if(Myfind(i,w,q)==1) continue; int h=0;//h用来记录在北京旅游期间的交通管制天数 for(int j=i+1;j<i+m+h;j++) { if(Myfind(j,w,q)==1) {h++;continue;} if(p[i]+p[j]<summax) {ans1=i;ans2=j; summax=p[i]+p[j];} } } cout << ans1 <<" " << ans2<< endl; } return 0; }