You are on page 1of 4

ĐÁP ÁN VÀ HƯỚNG DẪN CHẤM

ĐỀ THI CHỌN HỌC SINH GIỎI CẤP TỈNH LỚP 11 THPT

I. HƯỚNG DẪN CHẤM


Chấm bằng phần mềm tự động Themiss với bộ test được tạo ngẫu nhiên.
Bài 1: 20 test *0,3 điểm = 6,0 điểm
Bài 2: 20 test *0,35 điểm = 7,0 điểm
Bài 3: 20 test *0,35 điểm = 7,0 điểm
II. CHƯƠNG TRÌNH THAM KHẢO
BÀI 1: NỔI TRỘI
Chương trình tham khảo:
#include <bits/stdc++.h>;
using namespace std;
const long long oo=1e18;
const long long maxn=1e6;
long long a[maxn], tr[maxn], tl[maxn];
long long n,kq;
void docdl()
{
scanf("%lld",&n);
for (long long i=1; i<=n; i++)
scanf("%lld",&a[i]);
tl[0]=-oo;
tr[n+1]=-oo;
for (long long i=1; i<=n; i++)
tl[i]=max(tl[i],a[i]);
for (long long i=n; i>=1; i--)
tr[i]=max(tr[i+1],a[i]);
}
void xuli()
{
kq=0;
for (long long i=1; i<=n; i++)
if ((tl[i-1]<a[i]) || (tr[i+1]<a[i])) kq++;
}
void ghikq()
{ cout << kq;
}
int main()
{
// freopen("Noitroi.inp","r",stdin);
//freopen("Noitroi.out","w",stdout);
docdl();
xuli();
ghikq();
}

1
BÀI 2: TỈA LÊ
Chương trình tham khảo:

#include <bits/stdc++.h>
using namespace std;
const int maxn=1e6+2;
int a[maxn],Tmin[maxn];
long long s[maxn];
deque <int> q;
int n,k;
long long kq;
void docdl()
{
scanf("%d%d",&n,&k);
for (int i=1; i<=n; i++)
scanf("%d",&a[i]);
s[0]=0;
for (int i=1; i<=n; i++)
s[i]=s[i-1]+ a[i];
for (int i=1; i<=n; i++)
{
while ((!q.empty()) && (a[q.back()]>=a[i])) q.pop_back();
q.push_back(i);
while (q.front()<i-k+1) q.pop_front();
Tmin[i]=q.front();
}
}
void xuli()
{
kq=1e18;
for (int i=k; i<=n; i++)
kq=min(kq, s[i]-s[i-k]-k*a[Tmin[i]]);
}
void ghikq()
{
cout << kq;
}

int main()
{
// freopen("Tiale.inp","r",stdin);
// freopen("Tiale.out","w",stdout);
docdl();
xuli();
ghikq();
}

2
BÀI 3: PHÁO HOA
Chương trình tham khảo:
#include <bits/stdc++.h>
using namespace std;
const int maxn=1e5+5;
vector < vector <int > > e(maxn);
int n,m,k,t,kq;
int D[maxn];
deque <int> q;
void docdl()
{

scanf("%d%d%d%d",&n,&m,&k,&t);
for (int i=1; i<=n; i++) D[i]=n+1;
for (int i=1; i<=k; i++)
{
int u;
scanf("%d",&u);
D[u]=0;
q.push_back(u);
}
for (int i=1; i<=m; i++)
{
int u, v;
scanf("%d%d",&u,&v);
e[u].push_back(v);
e[v].push_back(u);
}
}
void bfs()
{
while (!q.empty())
{
int u=q.front();
for (int j=0; j<e[u].size(); j++)
{
int v=e[u][j];
if (D[v]==n+1)
{
D[v]=D[u]+1;
q.push_back(v);
}
}
q.pop_front();
}
}
void ghikq()
3
{
kq=n;
for (int i=1; i<=n; i++)
if (D[i]<=t) kq--;
cout << kq;
}
int main()
{
// freopen("phaohoa.inp","r",stdin);
// freopen("phaohoa.out","w",stdout);
docdl();
bfs();
ghikq();
}

You might also like