Luyện tập với “Đề thi chọn đội tuyển Quốc gia môn Tin học năm 2022-2023 có đáp án (Vòng 1) - Sở GD&ĐT Quảng Bình” được chia sẻ dưới đây sẽ giúp bạn ôn tập và nâng cao kỹ năng giải bài tập đề thi nhằm chuẩn bị cho bài thi sắp diễn ra đạt kết quả cao. Mời các bạn cùng tham khảo chi tiết đề thi.
Trang 1S GD&ĐT QU NG BÌNH Ở Ả
Đ CHÍNH TH C Ề Ứ
K THI CH N Ỳ Ọ Đ I TUY N Ộ Ể
D THI Ự CH N H C SINH GI I QU C GIA Ọ Ọ Ỏ Ố
NĂM H C 20222023 Ọ
Khóa ngày 20 tháng 9 năm 2022
Môn thi: TIN H C Ọ
S BÁO DANH:……… Ố
BÀI THI TH NH T Ứ Ấ
Th i gian: 1 ờ 80 phút (không k th i gian giao đ ) ể ờ ề
Đ g m có ề ồ 03 trang và 03 câu
S d ng ngôn ng l p trình đ gi i quy t các bài toán sau: ử ụ ữ ậ ể ả ế
(* Ph n m r ng, có th là PAS ho c CPP) ầ ở ộ ể ặ
Câu Tên file bài làm Tên file d li u vào ữ ệ Tên file d li u ra ữ ệ
1 SALE.* SALE.INP SALE.OUT
2 SEASNAIL.* SEASNAIL.INP SEASNAIL.OUT
Câu 1. Mua hàng (6 đi m) ể
M t c a hàng có ộ ử N món hàng được bày bán trên qu y theo th t t trái sang ph i, ầ ứ ự ừ ả v iớ
s hi u l n lố ệ ầ ượ ừ 1 N. Món hàng th t t ứ i có giá ti n là ề Ai.
Nhân d p ị trung thu, ch c a hàng quy t đ nh th c hi n chính sách gi m giá. C th v iủ ử ế ị ự ệ ả ụ ể ớ món hàng th ứ i, g i ọ B là m ng giá ti n c a các món hàng còn trên qu y n m bên trái ả ề ủ ầ ằ i có giá
ti n r h n ề ẻ ơ A i , sau khi s p x p ắ ế B tăng d n, n u s lầ ế ố ượng ph n t c a ầ ử ủ B không nh h n ỏ ơ K thì
có th mua món hàng ể i v i giá Bớ K. Ngượ ạc l i, n u s lế ố ượng ph n t c a ầ ử ủ B nh h n ỏ ơ K thì món hàng i s v n gi giá cũ. M t món hàng khi đẽ ẫ ữ ộ ược bán thì s đẽ ược đem đi kh i qu y.ỏ ầ
An là m t ngộ ười đam mê mua s m. An đ ng đây t chi u và mu n mua h t t t c cácắ ứ ừ ề ố ế ấ ả món hàng. Th t may m n cho anh là ngoài An ra không ai mua c , nên An có th t do ch nậ ắ ả ể ự ọ mua món hàng nào trước mà không s món hàng b mua m t. Tuy nhiên, An v n là ngợ ị ấ ẫ ười chi tiêu h p lý, anh mu n mua h t t t c món hàng v i s ti n b ra là ít nh t. ợ ố ế ấ ả ớ ố ề ỏ ấ
Hãy tính s ti n nh nh t mà An b ra đ mua h t t t c món hàng. ố ề ỏ ấ ỏ ể ế ấ ả
D li u ữ ệ vào: Cho trong file văn b n có tên ả SALE.INP có c u trúc:ấ
Dòng 1: Ch a 2 s nguyên dứ ố ương N và K (1 ≤ N ≤ 3000; 1 ≤ K ≤ N )
Dòng 2: Ch a N s nguyên dứ ố ương Ai là giá ti n c a món hàng th i (1 ≤ Aề ủ ứ i ≤ 10 9 )
(Hai s liên ti p trên cùng m t dòng đố ế ộ ược ghi cách nhau b i ít nh t m t d u cách)ở ấ ộ ấ
D li u ra: ữ ệ Ghi vào file văn b n có tên ả SALE.OUT v i c u trúcớ ấ :
Dòng 1: Ghi s ti n nh nh t mà An ph i tr đ mua h t t t c các món hàng.ố ề ỏ ấ ả ả ể ế ấ ả
Ví d : ụ
SALE.INP SALE.OUT
5 2
1 3 2 4 3
10
Trang 2Gi i thích: ả An ch n mua các món hàng theo v trí l n lọ ị ầ ượt là: 5,4,3,2,1 v i giá ti n mua ớ ề
t ng món hàng l n lừ ầ ượt là: 2,2,2,3,1. T ng giá ti n Anh ph i tr là 10.ổ ề ả ả
Câu 2. Chu i c (7 đi m).ỗ ố ể
Bi n Nh t L TP Đ ng H i để ậ ệ ồ ớ ược nhi u du khách bi t đ n nh m t trong nh ng đi mề ế ế ư ộ ữ ể ngh ng i lý tỉ ơ ưởng và đượ ạc t p chí Forbes (M ) bình ch n là m t trong nh ng bãi bi n đ pỹ ọ ộ ữ ể ẹ
nh t th gi i. Các bãi t m có đ d c l n, nấ ế ớ ắ ộ ố ớ ước trong xanh thích h p cho nh ng du kháchợ ữ
mu n thố ưởng th c nh ng lo i hình d ch v gi i trí ngh dứ ữ ạ ị ụ ả ỉ ưỡng câu cá, lướt ván, l n, ng m sanặ ắ hô…
Trong m t đ t đi du l ch TP Đ ng H i, sáng s m Đông thộ ợ ị ở ồ ớ ớ ường đi d o d c b bi nạ ọ ờ ể
Nh t L và nh t nh ng v c r i xâu chúng l i thành m tậ ệ ặ ữ ỏ ố ồ ạ ộ chu i. Nguyên t c t o chu i cỗ ắ ạ ỗ ố
c a Đông nh sau: Ban đ u chu i c r ng, không có v c, khi g p m t v c m i có th l yủ ư ầ ỗ ố ỗ ỏ ố ặ ộ ỏ ố ớ ể ấ
đ xâu vào 1 trong hai đ u c a chu i ho c b đi không l y, cu i cùng nh n để ầ ủ ỗ ặ ỏ ấ ố ậ ược m t chu iộ ỗ
v c mà tính t đ u đ n cu i chu i các v c có kích thỏ ố ừ ầ ế ố ỗ ỏ ố ước tăng d n và g m càng nhi u vầ ồ ề ỏ
c càng t t
Yêu c u:ầ Cho trước dãy a1, a2,…,aN là kích thước các v c mà Đông l n lỏ ố ầ ượ ặt g p khi đi d cọ
b bi n, hãy tìm cách nh t và xâu chu i đ đờ ể ặ ỗ ể ược nhi u v c nh t.ề ỏ ố ấ
D li u ữ ệ vào: Cho trong file văn b n có tên ả SEASNAIL.INP có c u trúc:ấ
Dòng 1: Ch a s nguyên dứ ố ương N (N≤105)
Dòng 2: Ch a N s nguyên dứ ố ương a1, a2,…,aN (ai≤10 9).
(Các s đố ược ghi cách nhau ít nh t 1 d u cách)ấ ấ
D li u ra: ữ ệ Ghi vào file văn b n có tên ả SEASNAIL.OUT v i c u trúc.ớ ấ
Dòng 1: Ghi m t s nguyên duy nh t là s lộ ố ấ ố ượng v c trong chu i t o đỏ ố ỗ ạ ược:
Ví d : ụ
SEASNAIL.INP SEASNAIL.OUT 5
4 4 5 3 1
4
Câu: 3. Đường truy n quan tr ngề ọ (7 đi m) ể
Cho m t m ng g m t p h p các nút và t p các độ ạ ồ ậ ợ ậ ường truy nề tr c ti pự ế hai chi u n i gi aề ố ữ các c p ặ nút trong m ng. Ngạ ười ta bi t r ng m ng này thông su t, t c là m i c p nút trongế ằ ạ ố ứ ọ ặ
m ng đ u có th truy n tin cho nhau. ạ ề ể ề
M t s nút trong m ng cung c p d ch v A còn m t s nút khác cung c p d ch v B choộ ố ạ ấ ị ụ ộ ố ấ ị ụ
t t c các nút (k c nó). Có th có m t nút cung c p c hai d ch v ấ ả ể ả ể ộ ấ ả ị ụ
N u m t đế ộ ường truy n tr c ti p b h ng có th làm cho m t s nút trong m ng khôngề ự ế ị ỏ ể ộ ố ạ
th s d ng m t trong hai d ch v Các để ử ụ ộ ị ụ ường truy n nh v y đề ư ậ ược g i là các đọ ường truy nề quan tr ng. ọ
B n hãy vi t chạ ế ương trình xác đ nh s ị ố lượng đường truy n quan tr ng trong m ng.ề ọ ạ
D li u vào: ữ ệ Cho trong file văn b n có tên ả IMPONET.INP có c u trúc:ấ
Dòng 1: Ghi 4 s N, M, K và L. Trong đó N là s nút trong m ng, M là s đố ố ạ ố ường truy nề
tr c ti p trong m ng, K là s nút cung c p d ch v A và L là s nút cung c p d ch v B. Cácự ế ạ ố ấ ị ụ ố ấ ị ụ nút được đánh s t 1 đ n N (1≤N≤10ố ừ ế 5; 1≤M≤106; 1≤K≤N; 1≤L≤N)
Dòng 2: Ghi K s là s hi u các nút cung c p d ch v A.ố ố ệ ấ ị ụ
Trang 3Dòng 3: Ghi L s là s hi u các nút cung c p d ch v B.ố ố ệ ấ ị ụ
Trong M dòng ti p theo, m i dòng ghi hai s p, q th hi n m t đế ỗ ố ể ệ ộ ường truy n tr c ti pề ự ế
n i nút p và nút q (1≤p, q≤N, p≠q).ố
(Hai s liên ti p trên cùng m t dòng đố ế ộ ược ghi cách nhau b i ít nh t m t d u cách)ở ấ ộ ấ
D li u ra: ữ ệ Ghi vào file văn b n có tên ả IMPONET.OUT v i c u trúc: ớ ấ
Dòng 1: Ghi m t s nguyên là s lộ ố ố ượng đường truy n quan tr ng trong m ng.ề ọ ạ
Ví dụ:
IMPONET.INP IMPONET.OUT Gi i thíchả
9 10 3 4
2 4 5
4 9 8 3
1 2
4 1
2 3
4 2
1 5
5 6
6 7
6 8
7 9
8 7
3 Các đường truy n quan tr ng ề ọ
là:
3 2
5 6
7 9
Trang 4S GD&ĐT QU NG BÌNH Ở Ả
H ƯỚ NG D N CH M Ẫ Ấ
K THI CH N Ỳ Ọ Đ I TUY N D THI Ộ Ể Ự
H C SINH GI I QU C GIA NĂM H C 2022 Ọ Ỏ Ố Ọ
2023 Khóa ngày 20 tháng 9 năm 2022
Môn thi: TIN H C Ọ
BÀI THI TH NH T Ứ Ấ
Đap an nay g m có ́ ́ ̀ ồ 05 trang
YÊU C U CHUNG Ầ
I. PH ƯƠ NG PHÁP
Bài thi c a thí sinh đ ủ ượ c ch m b ng ch ấ ằ ươ ng trình ch m t đ ng Themis ấ ự ộ
Test c a các bài đ ủ ượ c đ t c u hình nh sau: ặ ấ ư
+ Câu 1: GK t o ít nh t ạ ấ 12 test, m i test t ỗ ươ ng ng v i s đi m ứ ớ ố ể 6đ/s test ố Th i gian ờ cho m i test c a câu 1 là 1 giây ỗ ủ
+ Câu 2: GK t o ít nh t 14 test ạ ấ , m i test t ỗ ươ ng ng v i s đi m ứ ớ ố ể 7đ/s test ố , th i gian ờ cho m i test c a câu 2 là 1 giây ỗ ủ
+ Câu 3: GK t o ít nh t 14 test ạ ấ , m i test t ỗ ươ ng ng v i s đi m ứ ớ ố ể 7đ/s test ố , th i gian ờ cho m i test c a câu 2 là 1 giây ỗ ủ
T ng đi m đ ổ ể ượ c làm tròn đ n m t ch s hàng th p phân ế ộ ữ ố ở ậ
II. CH ƯƠ NG TRÌNH G I Ý Ợ
#include<bits/stdc++.h>
#define ll long long
#define v first
Trang 5using namespace std;
int main(){
int n,k;
long long res=0;
freopen("sale.inp","r",stdin);
freopen("sale.out","w",stdout);
ios_base::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
cin>>n>>k;
vector<pair<ll,int> > a(n);
for (int i=0;i<n;++i){
cin>>a[i].v;
a[i].i=i;
}
sort(a.begin(),a.end());
for (int i=n1;i>=0;i){
ll newprice=a[i].v;
int count=0;
for (int j=0;j<i;++j){
if (a[j].i<a[i].i && a[j].v<a[i].v){ ++count;
if (count==k){
newprice=a[j].v;
break;
}
}
}
res+=newprice;
}
cout<<res<<"\n";
}
Câu 2. Chu i c ỗ ố (7 đi m). ể
SEASNAIL.*
Program SEASNAIL;
Uses Math;
Const
maxN =100000;
Var
n,res,ans :LongInt;
A,F,L1,L2 :Array[1 maxN] of LongInt; f1,g:text;
procedure Enter;
Trang 6i :LongInt;
begin
Read(f1,n);
for i:=1 to n do Read(f1,A[i]);
end;
function Search1(i :LongInt) :LongInt;
var
left,right,mid :LongInt;
begin
left:=1; right:=res;
while (left<right) do
begin
mid:=(left+right) div 2;
if (A[F[mid]]>A[i]) then left:=mid+1 else right:=mid; end;
Exit(left);
end;
function Search2(i :LongInt) :LongInt;
var
left,right,mid :LongInt;
begin
left:=1; right:=res;
while (left<right) do
begin
mid:=(left+right) div 2;
if (A[F[mid]]<A[i]) then left:=mid+1 else right:=mid; end;
Exit(left);
end;
procedure Optimize;
var
i,j :LongInt;
begin
F[1]:=n; L1[n]:=1; res:=1;
for i:=n1 downto 1 do
if (A[i]<A[F[res]]) then
begin
Inc(res); F[res]:=i; L1[i]:=res;
end
else
begin
j:=Search1(i); F[j]:=i; L1[i]:=j;
end;
Trang 7for i:=n1 downto 1 do
if (A[i]>A[F[res]]) then
begin
Inc(res); F[res]:=i; L2[i]:=res;
end
else
begin
j:=Search2(i); F[j]:=i; L2[i]:=j;
end;
end;
procedure Escape;
var
i :LongInt;
begin
ans:=0;
for i:=1 to n do ans:=Max(ans,L1[i]+L2[i]1);
Write(g,ans);
end;
Begin
Assign(f1,'SEASNAIL.INP'); Reset(f1);
Assign(g,'SEASNAIL.OUT'); Rewrite(g);
Enter;
Optimize;
Escape;
Close(f1); Close(g);
End.
Câu 3. Đ ườ ng truy n quan tr ng ề ọ (7 đi m). ể IMPONET.*
#include <bits/stdc++.h>
#define maxn 100001
#define maxm 1000001
#define mp make_pair
#define ft first
#define sc second
using namespace std;
typedef pair<int,int> II;
int n,m,K,L, a[maxn], b[maxn];
II e[maxm];
int deg[maxn];
vector<int> g[maxn];
int sla[maxn], slb[maxn];
int sn, s[maxn], cl[maxn], p[maxn], prev1[maxn];
int id, num[maxn], low[maxn];
Trang 8void dfs(int xp) {
sn=0;
s[++sn]=xp, cl[xp]=1, p[xp]=0, prev1[xp]=0; num[xp]=low[xp]=++id;
sla[xp]=(a[xp]==1) ? 1 : 0;
slb[xp]=(b[xp]==1) ? 1 : 0;
while (sn) {
int u=s[sn];
if (cur[u]<deg[u]) {
int i=g[u][cur[u]++];
if (i!=p[u]) {
int v=(e[i].ft==u) ? e[i].sc : e[i].ft;
if (cl[v]==0) {
s[++sn]=v, cl[v]=1, p[v]=i, prev1[v]=u; num[v]=low[v]=++id;
sla[v]=(a[v]==1) ? 1 : 0;
slb[v]=(b[v]==1) ? 1 : 0;
} else low[u]=min(low[u],num[v]);
}
} else {
int w=prev1[u];
if (w) {
low[w]=min(low[w],low[u]);
sla[w]+=sla[u];
slb[w]+=slb[u];
}
sn;
}
}
}
int main() {
freopen("imponet.inp","r",stdin);
freopen("imponet.out","w",stdout);
scanf("%d%d%d%d",&n,&m,&K,&L);
for(int i=1;i<=K;i++) {
int u; scanf("%d",&u);
a[u]=1;
}
for(int i=1;i<=L;i++) {
int v; scanf("%d",&v);
b[v]=1;
}
for(int i=1;i<=m;i++) {
int u, v; scanf("%d%d",&u,&v);
Trang 9}
for(int i=1;i<=m;i++) {
int u=e[i].ft, v=e[i].sc;
g[u].push_back(i); deg[u]++;
g[v].push_back(i); deg[v]++;
}
for(int i=1;i<=n;i++) cur[i]=cl[i]=0;
id=0;
for(int i=1;i<=n;i++) if (cl[i]==0) dfs(i);
int ans=0;
for(int i=1;i<=m;i++) {
int u=e[i].ft, v=e[i].sc;
if (prev1[u]==v) swap(u,v);
if (prev1[v]==u && low[v]>num[u]) {
if (sla[v]==0 || sla[v]==K || slb[v]==0 || slb[v]==L) ans++; }
}
printf("%d",ans);
}