Tải bản đầy đủ (.pdf) (11 trang)

Đề thi và đáp án HSG cấp tỉnh môn Tin học tỉnh Thanh Hóa năm 2022

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.41 MB, 11 trang )




HƯỚNG DẪN GIẢI ĐỀ THI
File này mình chỉ share hướng dẫn làm Bài 1 thơi nhé. Bạn nào muốn có tất cả
các bài thì tải file hướng dẫn về xem.
Bài 1: Ta tóm tắt lại đề một chút nhé
Cả khu phố có N người
Có a người biết thực hiện tốt việc cách ly (Lưu ý biết thực hiện tốt việc cách ly
nhưng chưa chắc đã thực hiện cách ly tốt, cũng như biết mà không làm ấy)
Cán bộ y tế chỉ ghi được b người thực hiện việc cách ly khơng tốt (như vậy b này có
thể là tất cả những người trong khu phố thực hiện việc cách ly không tốt hoặc chỉ là
một phần trong số những người thực hiện việc cách ly khơng tốt).
Ta có hình vẽ sau:

Dựa vào 2 hình vẽ trên ta có cách tìm số người tối thiểu và số người tối đa thực hiện
tốt việc cách ly như sau:
- Số người tối thiểu thực hiện tốt việc cách ly khi số người biết cách thực hiện
cách ly nhưng không thực hiện tốt việc cách ly nhiều nhất. Tức là số lượng người
mà cán bộ y tế ghi được thuộc nhóm a nhiều nhất. Do đó ta có cách tính tối thiểu
như sau:
Nếu b>a thì
toithieu=0 (cả a người biết thực hiện tốt cách ly nhưng không người nào trong
số a người này thực hiện tốt việc cách ly)
ngược lại
toithieu=a-b (cả b người không thực hiện tốt cách ly mà cán bộ y tế ghi được
đều nằm trong nhóm a người, tức đều là những người biết thực hiện cách ly)
- Số người tối đa thực hiện tốt việc cách ly khi số người biết cách thực hiện cách ly
và thực hiện tốt việc cách ly nhiều nhất. Tức là số người mà cán bộ y tế ghi được



thuộc nhóm a ít nhất.
Nếu b>N-a thì
toida=N-b (có một số người biết thực hiện cách ly nhưng thực hiện không tốt)
ngược lại
toida=a (cả a người biết thực hiện cách ly đều thực thực hiện tốt)
CODE Bài 1
#include<bits/stdc++.h>
#define ll long long
using namespace std;
ifstream fi;
ofstream fo;
ll n,a,b,toithieu,toida;
int main()
{
fi.open("BAI1.INP");
fi>>n>>a>>b;
fi.close();
fo.open("BAI1.OUT");
if (a>b)
toithieu=a-b;
else
toithieu=0;
if (b>n-a)
toida=a-(b-(n-a));
else
toida=a;
fo<return 0;
}



CODE Bài 2:
#include<bits/stdc++.h>
using namespace std;
#define ll long long
ifstream fi;
ofstream fo;
string s;
ll n,na,nb,x,i,j,kq;
char a[1000001],b[1000001];
ll c[1000001],d[1000001];
int main()
{
fi.open("BAI2.INP");
getline(fi,s);
n=s.size();
s=s+" ";
na=0;
x=1;
for (i=0;i<=n;i++)
if (s[i]!=s[i+1])
{
na++;
a[na]=s[i];
c[na]=x;
x=1;
}
else
x++;
/////

getline(fi,s);
n=s.size();
s=s+" ";
nb=0;
x=1;
for (i=0;i<=n;i++)
if (s[i]!=s[i+1])
{
nb++;
b[nb]=s[i];
d[nb]=x;
x=1;
}
else
x++;
/////
i=1;


j=1;
kq=0;
while (i<=na && j<=nb)
if (a[i]==b[j] && c[i]>=d[j])
{
if (a[i]==' ')
kq++;
i++;
j++;
}
else

{
while (a[i]!=' ')
i++;
while (b[j]!=' ')
j++;
i++;
j++;
}
fo.open("BAI2.OUT");
fo<fo.close();
return 0;
}


CODE Bài 3:
#include<bits/stdc++.h>
using namespace std;
ifstream fi;
ofstream fo;
long long n,i,j,k,d,c,g,vt,kq,a[100001],b[100001],x[100001];
int main()
{
fi.open("BAI3.INP");
fi>>n>>k;
for(i=1;i<=n;i++)
fi>>a[i];
fi.close();
fo.open("BAI3.OUT");
sort(a+1,a+1+n,greater<long long>());

j=1;
kq=0;
for(i=1;i<=n;i++)
{
if (b[i]==0)
kq=kq+a[i];
while (j<=n && (a[i]-a[j]j++;
if (j>n)
{
for (j=i+1;j<=n;j++)
if (b[j]==0)
kq=kq+a[j];
break;
}
else
b[j]=1;
}
fo<return 0;
}


CODE Bài 4:
#include<bits/stdc++.h>
using namespace std;
#define ll long long
ifstream fi;
ofstream fo;
ll l,r,i,j,x,n,m,kq;

ll d[1000001],a[1000001];
int main()
{
n=1000000;
m=sqrt(n);
d[1]=1;
for (i=2;i<=m;i++)
if (d[i]==0)
for (j=2*i;j<=n;j=j+i)
d[j]=1;
m=0;
for (i=1;i<=n;i++)
if (d[i]==0)
{
m++;
a[m]=i;
}
fi.open("BAI4.INP");
fi>>l>>r;
fi.close();
for (i=1;i<=m;i++)
{
x=a[i]*a[i];
j=2;
while (x{
if (x>l && d[j+1]==0)
{
kq++;
cout<

}
j++;
x=x*a[i];
}
}
fo.open("BAI4.OUT");
fo<fo.close();
return 0;
}


CODE Bài 5:
#include<bits/stdc.h>
using namespace std;
#define ll long long
ifstream fi;
ofstream fo;
ll n,i,j,a[1000001],b[1000001],s,nn;
int main()
{
fi.open("BAI5.INP");
fi>>n;
for(i=1;i<=n;i)
fi>>a[i];
fi.close();
for (i=1;i<=9;i)
b[i]=b[i-1][i];
for (i=10;i<=n;i)
{

b[i]=b[i-1][i];
s=a[i];
nn=a[i];
for (j=i-9;j{
s=s[j];
if (nn>a[j])
nn=a[j];
}
b[i]=min(b[i],b[i-10]nn);
}
fo.open("BAI5.OUT");
fo<fo.close();
return 0;
}

Trong file đính kèm mình có để 2 bộ code. Một bộ code do mình hướng dẫn HS làm
theo thuật tốn trên (C++) và một bộ code của học sinh được 20/20 điểm cho các bạn
tham khảo.


Dưới đây là hình ảnh chấm điểm bằng Themis

Các bạn có thể xem thêm nhiều đề khác tại
/>
Rất mong nhận được sự góp ý và ủng hộ. Cảm ơn




×