周六的北京赛区的比赛,是这几场比赛中出题最少的一场。
首先第一题,题意说的很复杂,出去旅游N天,其中去北京玩M天,去的第一天和另外一天要去北大参观,其中有几使天北京交通受限,游玩受阻,但是可以延长在北京的时间。要找出北大游客数最少的两天。只要把题意理解透彻,代码就比较容易了,可以直接暴力枚举。
- #include<iostream>
- #include<stdio.h>
- #include<math.h>
- #include<stdio.h>
- #define ll long long
- #define INF 10086111
- #define M (t[k].l+t[k].r)/2
- #define lson k*2
- #define rson k*2+1
- using namespace std;
- int a[1005];
- int vis[1005];
- int main()
- {
- int i,j,k,n,m,x,d,maxx,minn,ans,d1,d2,t,s;
- while(scanf("%d%d",&n,&m)!=EOF)
- {
- for(i=0;i<n;i++)
- {
- vis[i]=0;
- scanf("%d",&a[i]);
- }
- scanf("%d",&x);
- for(i=0;i<x;i++)
- {
- scanf("%d",&d);
- vis[d]=1;
- }
- minn=INF;
- for(i=0;i<n-m+1;i++)
- {
- if(vis[i])
- continue;
- if(a[i]>=minn)
- continue;
- ans=1;
- t=INF;
- for(j=i+1;j<n;j++)
- {
- if(vis[j])
- continue;
- if(t>a[j])
- {
- t=a[j];
- s=j;
- }
- ans++;
- if(ans==m)
- {
- if(minn>a[i]+t)
- {
- minn=a[i]+t;
- d1=i;
- d2=s;
- }
- break;
- }
- }
- }
- printf("%d %d\n",d1,d2);
- }
- return 0;
- }
今天下午南宁的比赛只看了B题,就去准备二级了。B题可以直接开一个数组,每次在s,k段上加上K,最后再扫一遍数组求最大值。
这周训练状态不好,光想着准备二级,虽然最后也考得很不好。还是自己对ACM不够上心,自己也反省,通过这几次网络赛,和别的队伍的差距真的很大,这样下去确实很危险。二级现在也结束了,下周要收心好好补线段树,快点出题。