Đội ôn thi tin học trẻ không chuyên năm 2012

Status
Không mở trả lời sau này.
C

cuong276

Giải thích lần cuối. Số nguyên dương a gọi là số phản nguyên tố nếu với mọi số nguyên dương b<a thì số các ước số của b nhỏ hơn số các ước số của a. Đó chính là khái niệm về số phản nguyên tố. Đề ra có nghĩa là tìm số có số ước lớn nhất không vượt quá n.
Thân!
 
T

toan_bich

Hi các Chị, Em cũng chuẩn bị thi nè! nghe nói đề năm nay là đề mở hổng biết có khó dữ hông!
 
C

cuong276

Đang ôn thi. Không nên chém gió nhiều
Ai có đề nào hay hay không? post lên đi cho mọi người cùng giải
 
M

mikelhpdatke

Bài tập thì nhiều lắm

Xét dãy A các số nguyên tố

2, 3, 5, 7, 11, 13, 17, 19,...

và dãy B gồm các số thu được từ dãy A bằng cách ghép hai số liên tiếp trong A:

23, 57, 1113, 1719, ...

Trong dãy B có những phần tử là số nguyên tố. Chẳng hạn 23, 3137, 8389, 157163...

Các số nguyên tố trong dãy B gọi là số nguyên tố ghép.

Yêu cầu: Cho trước số nguyên dương K ≤ 500, hãy tìm số nguyên tố ghép thứ K.
Dữ liệu

Gồm 1 số nguyên dương K duy nhất.
Kết qủa

In ra 1 số nguyên dương duy nhất là số nguyên tố ghép thứ K.
Ví dụ

Dữ liệu:
2

Kết qủa
3137
 
Q

quanghero100

Bài tập thì nhiều lắm

Xét dãy A các số nguyên tố

2, 3, 5, 7, 11, 13, 17, 19,...

và dãy B gồm các số thu được từ dãy A bằng cách ghép hai số liên tiếp trong A:

23, 57, 1113, 1719, ...

Trong dãy B có những phần tử là số nguyên tố. Chẳng hạn 23, 3137, 8389, 157163...

Các số nguyên tố trong dãy B gọi là số nguyên tố ghép.

Yêu cầu: Cho trước số nguyên dương K ≤ 500, hãy tìm số nguyên tố ghép thứ K.
Dữ liệu

Gồm 1 số nguyên dương K duy nhất.
Kết qủa

In ra 1 số nguyên dương duy nhất là số nguyên tố ghép thứ K.
Ví dụ

Dữ liệu:
2

Kết qủa
3137
Mã:
uses crt;
var k,i,d,j,u:int64;
   s,ss:string;
function kt(i:int64):boolean;
var j:longint;
begin
   kt:=true;
   for j:=2 to trunc(sqrt(i)) do
     if i mod j=0 then
       begin
          kt:=false;
          break;
       end;
end;
function ghep(i,j:int64):int64;
var  n,m:longint;
begin
  s:='';
  str(i,ss);
  s:=s+ss;
  str(j,ss);
  s:=s+ss;
  val(s,n,m);
  ghep:=n;
end;
begin
   clrscr;
   write('k=');
   readln(k);
   j:=1;
   d:=0;
   repeat
       i:=j;
      repeat
         inc(i);
      until kt(i)=true;
      j:=i;
      repeat
         inc(j);
      until kt(j)=true;
      if kt(ghep(i,j))=true then inc(d);
   until d=k;
   writeln(s);
   readln;
end.
 
M

mikelhpdatke

với số nguyên dương N, tính số cách phân tích N thành tổng các số nguyên tố mà mỗi số nt không xuất hiện quá k lần;
VD:N=12,k= 3
12=2+2+2+3+3;
12=2+2+3+5 = 2+3+7 = 2+5+5 = 5+7;
@-)@-)
 
Q

quanghero100

với số nguyên dương N, tính số cách phân tích N thành tổng các số nguyên tố mà mỗi số nt không xuất hiện quá k lần;
VD:N=12,k= 3
12=2+2+2+3+3;
12=2+2+3+5 = 2+3+7 = 2+5+5 = 5+7;

hjhj làm lụi anh em xem thử :)) :)) quay lui đó :p :p
Mã:
uses crt;
var n,k,d,i,m:longint;
    a,x:array[1..1000] of longint;
function kt(n:longint):boolean;
var j:longint;
begin
  kt:=true;
  for j:=2 to trunc(sqrt(n)) do
    if n mod j=0 then
      begin
         kt:=false;
         break;
      end;
end;
procedure  ptnt(n:longint);
var i,j:integer;
begin
   d:=0;
   for i:=2 to n do
     if kt(i)=true then
       begin
          inc(d);
         a[d]:=i;
       end;
end;
procedure try(i:integer);
var j,u,t:longint;
begin
 for j:=0 to k do
   begin
      x[i]:=j;
      if i=d then
        begin
           t:=0;
           for u:=1 to d do
             t:=t+a[u]*x[u];
             if t=n then inc(m);
        end
      else try(i+1);
   end;
end;
begin
  clrscr;
  readln(n,k);
  ptnt(n);
  m:=0;
  try(1);
  writeln(m);
  readln;
  end.
 
M

m4u_hoahoctro

Mọi ng cho m xin cái code bài xâu thuần nhất với, m coi phần nén và giải nén trong cuốn tin học nhà trường rồi nhưng quá rối, chỉ phân tích dc 60-80% chương trình thôi, bạn nào có code đơn giản và ngắn gọn hơn thì post lên giúp mình với nhé
Thanks
 
M

mikelhpdatke

Nguyên văn đề bài:


A. LLPS
time limit per test
2 seconds
memory limit per test
256 megabytes
input
standard input
output
standard output​

This problem's actual name, "Lexicographically Largest Palindromic Subsequence" is too long to fit into the page headline.

You are given string s consisting of lowercase English letters only. Find its lexicographically largest palindromic subsequence.

We'll call a non-empty string s[p1p2... pk] = sp1sp2... spk (1 *≤* p1*<*p2*<*...*<*pk *≤* |s|) a subsequence of string s = s1s2... s|s|, where |s| is the length of string s. For example, strings "abcb", "b" and "abacaba" are subsequences of string "abacaba".

String x = x1x2... x|x| is lexicographically larger than string y = y1y2... y|y| if either |x| > |y| and x1*=*y1, x2*=*y2, ...,*x|y|*=*y|y|, or there exists such number r (r*<*|x|, r*<*|y|) that x1*=*y1, x2*=*y2, ..., xr*=*yr and xr**+**1*>*yr**+**1. Characters in the strings are compared according to their ASCII codes. For example, string "ranger" is lexicographically larger than string "racecar" and string "poster" is lexicographically larger than string "post".

String s = s1s2... s|s| is a palindrome if it matches string rev(s) = s|s|s|s|*-*1... s1. In other words, a string is a palindrome if it reads the same way from left to right and from right to left. For example, palindromic strings are "racecar", "refer" and "z".

Input

The only input line contains a non-empty string s consisting of lowercase English letters only. Its length does not exceed 10.
Output

Print the lexicographically largest palindromic subsequence of string s.

Sample test(s)

Input

radar

Output

rr
--------------------
Input

bowwowwow

Output

wwwww
--------------------
Input

codeforces

Output

s
--------------------
Input

mississipp

Output

ssss
--------------------
Note

Among all distinct subsequences of string "radar" the following ones are palindromes: "a", "d", "r", "aa", "rr", "ada", "rar", "rdr", "raar" and "radar". The lexicographically largest of them is "rr".





Đề bài mình dịch tạm :D
Cho một xâu s chỉ gồm ký tự chữ la tinh thường. (Giới hạn 10 cs). Tìm xâu palidrome lớn nhất.
 
Last edited by a moderator:
M

m4u_hoahoctro

Mọi ng giúp m bài này với
cho file text, xóa các dấu cách thừa trong file
mÌnh đã làm, ctrl f9 ok nhưng chỉ hiện lên cái bảng đen, enter thì trở lại màn hình soạn thảo, mở file text thì chẳng thấy thay đổi gi hết
Mã:
clrscr;
assign(f,'input2.txt');
reset(f);
while not eof(f) do
begin
readln(f,s);
while s[1]=' ' then delete......
while s[length(s)]=' ' then delete ........
for i:=length(s) downto 2 do
if s[i]=' ' and s[i-1]=' ' then delete(s,i,1);
end;
close(f);
 
C

cuong276

Mã:
clrscr;
assign(f,'input2.txt');
reset(f);
while not eof(f) do
begin
readln(f,s);
while s[1]=' ' then delete......
while s[length(s)]=' ' then delete ........
for i:=length(s) downto 2 do
if s[i]=' ' and s[i-1]=' ' then delete(s,i,1);
end;
[COLOR="Red"]writeln(s);[/COLOR]
close(f);
Code của bạn cần thêm vào chỗ đỏ kia kìa
 
M

m4u_hoahoctro

Mọi ng giúp mình code bài tìm phần tử yên ngựa trong mảng 2 chiều với
Mình đã coi qua code của bài trong cuốn tin học nhà trường
Mã:
const
  Inp = 'Bai30.INP';
  Out = 'Bai30.OUT';
  MaxLongInt = 2147483647;
var
  Min, Max: array[1..5000] of LongInt;
  m, n: Integer;
procedure ReadInput;
var
  i, j, k: Integer;
  hf: Text;
begin
  Assign(hf, Inp);
  Reset(hf);
  Readln(hf, m, n);
  for i := 1 to m do Min[i] :=  MaxLongInt;
  for j := 1 to n do Max[j] := -MaxLongInt;
  for i := 1 to m do
  begin
    for j := 1 to n do
    begin
      Read(hf, k);
      if Min[i] > k then Min[i] := k;
      if Max[j] < k then Max[j] := k;
    end;
    Readln(hf);
  end;
  Close(hf);
end;
procedure WriteOutput;
var
  i, j: Integer;
  Result: Boolean;
  hf: Text;
begin
  Result := False;
  Assign(hf, Out);
  Rewrite(hf);
  Writeln(hf, 'Cac phan tu yen ngua la: ');
  for i := 1 to m do
    for j := 1 to n do
      if Min[i] = Max[j] then
      begin
        Result := True;
        Write(hf, '(', i, ',', j, '); ');
      end;
  if not Result then
  begin
    Rewrite(hf);
    Write(hf, 'Khong co phan tu yen ngua');
  end;
  Close(hf);
end;
begin
  ReadInput;
  WriteOutput;
end.

Cái duy nhất m không hiểu ở đây là cái phần maxlongint và phần dò min,max=maxlongint. Max này có nghĩa là gì vậy ?
Ah còn nữa
Mọi ng xem bài này giùm, m chưa hiểu phần đọc dữ liệu chỗ đọc phần tử đó
trích từ cuốn tin học nhà trường
đề Bài 2/1999 - Tổ chức tham quan
(Dành cho học sinh THCS)
Trong đợt tổ chức đi tham quan danh lam thắng cảnh của thành phố Hồ Chí Minh, Ban tổ chức hội thi Tin học trẻ tổ chức cho N đoàn ( đánh từ số 1 đến N) mỗi đoàn đi thăm quan một địa điểm khác nhau. Đoàn thứ i đi thăm địa điểm ở cách Khách sạn Hoàng Đế di km (i=1,2,...., N). Hội thi có M xe taxi đánh số từ 1 đến M (MN) để phục vụ việc đưa các đoàn đi thăm quan. Xe thứ j có mức tiêu thụ xăng là vj đơn vị thể tích/km.
Yêu cầu: Hãy chọn N xe để phục vụ việc đưa các đoàn đi thăm quan, mỗi xe chỉ phục vụ một đoàn, sao cho tổng chi phí xăng cần sử dụng là ít nhất.
Dữ liệu: File văn bản P2.INP:
- Dòng đầu tiên chứa hai số nguyên dương N, M (NM200);
- Dòng thứ hai chứa các số nguyên dương d1, d2, ..., dN;
- Dòng thứ ba chứa các số nguyên dương v1, v2, ..., vM.
- Các số trên cùng một dòng được ghi khác nhau bởi dấu trắng.
Kết quả: Ghi ra file văn bản P2.OUT:
- Dòng đầu tiên chứa tổng lượng xăng dầu cần dùng cho việc đưa các đoàn đi thăm quan (không tính lượt về);
- Dòng thứ i trong số N dòng tiếp theo ghi chỉ số xe phục vụ đoàn i (i=1, 2, ..., N).

Ví dụ:
P2.INP P2.OUT
3 4
7 5 9
17 13 15 10 256
2
3
4

giải

(Dành cho học sinh THCS)
Code:
Mã:
Program bai2;
uses crt;
const fi = 'P2.inp';
         fo = 'P2.out';
type _type=array[1..2] of integer;
 mang=array[1..200] of _type;

var f:text;
 d,v:mang;
 m,n:byte;

procedure input;
var i:byte;
begin
 assign(f,fi);
 reset(f);
 readln(f,n,m);
 for i:=1 to n do
 begin
 read(f,d[i,1]);
 d[i,2]:=i;
 end;
 readln(f);
 for i:=1 to m do
 begin
 read(f,v[i,1]);
 v[i,2]:=i;
 end;
 close(f);
end;
cái mình thắc mắc là sao lại gán v[2.,i] và d[2,i]=i ?
Và cái hỏi cuối cùng là

Đề cho 2 file inp1 và inp2, inp1 chứa 1 đoạn vb bất kì, inp2 chứa k quá 50 dòng, mỗi dòng 2 từ đích và nguồn, tìm trong inp1 tất cả từ đích có dc và thay bằng từ nguồn, ghi lại vb đã thay vào file kq.out
code
Mã:
program thaythetu;
var
        source,des:array[1..50]of string;
        n:byte;
procedure init;
var
   i:byte;
   s:string;
   f:text;
begin
     assign(f,'input2.txt');
     reset(f);
     n:=0;
     while not eof(f) do
     begin
          readln(f,s);
          inc(n);
          while (s<>'')and(s[1]=' ') do
                delete(s,1,1);
          if i>0 then
          begin
               i:=pos(' ',s);
               des[n]:=copy(s,1,i-1);
               while (i<=length(s))and(s[i]=' ') do
                    i:=i+1;
               source[n]:=copy(s,i,length(s)-i+1);
          end;
     end;
end;

procedure replace;
var
   f,g:text;
   s:string;
   i,k:byte;
begin
     assign(f,'input1.txt');
     reset(f);
     assign(g,'kq.out');
     rewrite(g);
     while not eof(f) do
     begin
          readln(f,s);
          for k:=1 to n do
              for i:=1 to length(s)-length(des[k])+1 do
                  if des[k]=copy(s,i,length(des[k])) then
                  begin
                       delete(s,i,length(des[k]));
                       insert(source[k],s,i);
                       i:=i+length(source[k]);
                  end;
          writeln(g,s);
     end;
     close(f);
     close(g);
end;

begin
     init;
     replace;
end.

Bài giải trên m qua vn-zoom hỏi thì các bạn ấy nói là biến i dùng trong vòng lặp nên k thể tính toán, phải gán thành biến j, vậy mọi ng chỉ mình cách sửa lại cái phần gán đó sao cho ct chạy dc với
Thanks all
 
C

cuong276

Giúp bạn trước câu 1 và câu 2 nha:
Câu 1: Bạn viết nhầm rồi đó. min=maxlongint ; max=-maxlongint chứ không phải là min,max=maxlongint. Gán cái này dùng để tìm giá trị lớn nhất và giá trị nhỏ nhất của hàng và cột.
Câu 2: d[i,2] và v[i,2] là gán chỉ số của d[i,1] và v[i,1] để output có chỉ số mà in ra chứ.
 
M

m4u_hoahoctro

thanks, bạn giúp luôn m câu 3 nhé! cái min max mình ghi tắt chứ không phải sai.
:p
 
C

cuong276

Bài 3 bạn có thể giải thích cái thuật toán được không?
Mình nhìn vào không hiểu cho lắm


Hay là bạn thử cách lập trình này nha:
Đọc từng từ của đoạn văn ở input2 vào mảng a
Đọc các chữ cái cần thay thế trong input1 vào mảng b
Đọc từng chữ cái được thay bởi các chữ cái (trong mảng b) vào mảng c
Sau đó chạy từ đầu tới cuối của mảng a tìm xem nếu
Mã:
a[i]=b[j] thì a[i][i]:=c[j]
.
Sau đó write cái đoạn vừa thay ra output là xong.
 
Last edited by a moderator:
Status
Không mở trả lời sau này.
Top Bottom