K
Khách

Hãy nhập câu hỏi của bạn vào đây, nếu là tài khoản VIP, bạn sẽ được ưu tiên trả lời.

J. Mảng tốt time limit per test1 second memory limit per test512 megabytes

Cho dãy a1,a2,a3,...,ana1,a2,a3,...,an thoả mãn aiai+1ai≠ai+1. Hãy thực hiện các thao tác gán ai=vai=v sao cho vai−1v≠ai−1 và vai+1v≠ai+1, để mảng cuối cùng chỉ có hai giá trị khác nhau xuất hiện trên mảng.

Input

Dòng đầu tiên của dữ liệu vào chứa số nguyên tt (1≤t≤1051≤t≤105), là số lượng test. Mô tả của các test như sau:

  • Dòng đầu tiên của mỗi test chứa một số nguyên dương nn (2≤n≤2⋅1052≤n≤2⋅105) là độ dài của mảng.
  • Dòng thứ hai của mỗi test chứa nn số nguyên aiai (1≤ain1≤ai≤n). Dữ liệu đảm bảo rằng aiai+1ai≠ai+1 với 1≤in−11≤i≤n−1.
Dữ liệu đảm bảo rằng tổng của nn trong tất cả các test không vượt quá 2⋅1052⋅105. Output

Với mỗi test, in ra một số nguyên duy nhất là số lượng phép biến đổi nhỏ nhất cần thực hiện.

Example Input Copy
2
5
3 4 1 3 4
2
2 1
Output Copy
3
0
Note
  1. 25%25% số điểm có tổng nn trong tất cả các test không vượt quá 100100
  2. 25%25% số điểm có tổng nn trong tất cả các test không vượt quá 500500
  3. 25%25% số điểm có tổng nn trong tất cả các test không vượt quá 40004000
  4. 25%25% số điểm không có ràng buộc gì thêm
1
22 tháng 5

Đây là một bài toán khá thú vị liên quan đến việc biến đổi mảng sao cho sau cùng mảng chỉ còn đúng 2 giá trị khác nhau xuất hiện, đồng thời đảm bảo tính chất a[i] != a[i+1] luôn được giữ trong suốt quá trình biến đổi.


Đề bài tóm tắt

  • Cho mảng an phần tử, thỏa mãn a[i] != a[i+1] với mọi i.
  • Ta được phép thực hiện các thao tác: gán a[i] = v với điều kiện v != a[i-1]v != a[i+1].
  • Mục tiêu: biến đổi mảng sao cho mảng cuối cùng chỉ còn 2 giá trị khác nhau xuất hiện.
  • Hỏi số thao tác gán nhỏ nhất cần thực hiện.

Phân tích

  • Mảng ban đầu đã thỏa mãn a[i] != a[i+1], tức là các phần tử liên tiếp khác nhau.
  • Mục tiêu là chỉ còn 2 giá trị khác nhau trong toàn mảng.
  • Do a[i] != a[i+1] nên mảng có thể xem như xen kẽ các giá trị, ví dụ: x y x y x y ...
  • Việc giữ a[i] != a[i+1] đồng nghĩa các giá trị ở vị trí chẵn và lẻ phải khác nhau.
  • Tức là sau biến đổi, mảng có dạng: vị trí chẵn toàn giá trị A, vị trí lẻ toàn giá trị B (với A != B).

Ý tưởng:

  • Ta muốn biến đổi sao cho vị trí chẵn chứa một giá trị (cố định), vị trí lẻ chứa một giá trị khác (cố định).
  • Việc này tương đương với:
    • Chọn một giá trị val_even cho các vị trí chẵn,
    • Chọn một giá trị val_odd cho các vị trí lẻ,
    • Trong đó val_even != val_odd.
  • Vì các vị trí chẵn và lẻ hiện tại chứa các giá trị khác nhau, ta sẽ chọn các giá trị tối ưu sao cho số lần biến đổi là nhỏ nhất.

Cách làm cụ thể

  1. Đếm tần suất các giá trị xuất hiện ở vị trí chẵn (freq_even) và vị trí lẻ (freq_odd).
  2. Lấy 2 giá trị có tần suất lớn nhất ở vị trí chẵn, và 2 giá trị có tần suất lớn nhất ở vị trí lẻ (để có phương án dự phòng).
  3. Ta thử tất cả các tổ hợp (val_even, val_odd) trong 4 giá trị tìm được sao cho val_even != val_odd.
  4. Với mỗi tổ hợp, tính số lần biến đổi cần thực hiện = (số vị trí chẵn - freq_even[val_even]) + (số vị trí lẻ - freq_odd[val_odd]).
  5. Kết quả là giá trị nhỏ nhất trong các phương án trên.

Độ phức tạp

  • Với tổng số phần tử trên tất cả test là 2*10^5, việc đếm tần suất và thử 4x4 tổ hợp rất nhanh.

Code tham khảo (Python)

import sys
input = sys.stdin.readline

t = int(input())
for _ in range(t):
    n = int(input())
    a = list(map(int, input().split()))

    freq_even = {}
    freq_odd = {}

    for i in range(n):
        if i % 2 == 0:
            freq_even[a[i]] = freq_even.get(a[i], 0) + 1
        else:
            freq_odd[a[i]] = freq_odd.get(a[i], 0) + 1

    # Lấy 2 giá trị tần suất cao nhất ở vị trí chẵn
    even_sorted = sorted(freq_even.items(), key=lambda x: x[1], reverse=True)
    even_sorted += [(None,0), (None,0)]  # đảm bảo có đủ phần tử
    even_top2 = even_sorted[:2]

    # Lấy 2 giá trị tần suất cao nhất ở vị trí lẻ
    odd_sorted = sorted(freq_odd.items(), key=lambda x: x[1], reverse=True)
    odd_sorted += [(None,0), (None,0)]
    odd_top2 = odd_sorted[:2]

    res = n  # max biến đổi = n

    for even_val, even_count in even_top2:
        for odd_val, odd_count in odd_top2:
            if even_val != odd_val:
                changes = ( (n+1)//2 - even_count ) + ( n//2 - odd_count )
                if changes < res:
                    res = changes

    print(res)

Giải thích ví dụ trong đề bài:

Input:

2
5
3 4 1 3 4
2
2 1
  • Test 1:
    • Vị trí chẵn (0,2,4): 3,1,4
    • Vị trí lẻ (1,3): 4,3
    • freq_even: {3:1, 1:1, 4:1}
    • freq_odd: {4:1, 3:1}
    • Các tổ hợp thử: ví dụ (3,4), (3,3), (1,4), (1,3), (4,4), (4,3)...
    • Chọn (3,4): biến đổi = số vị trí chẵn - freq_even[3] + số vị trí lẻ - freq_odd[4] = 3 -1 + 2 -1 = 3
  • Test 2:
    • Vị trí chẵn: 2 (1 vị trí)
    • Vị trí lẻ: 1 (1 vị trí)
    • Hai giá trị khác nhau nên mảng đã thỏa mãn, không cần biến đổi, output 0.

Bạn muốn mình giải thích chi tiết hơn hay giúp triển khai code trên theo ngôn ngữ khác không?

5 tháng 3 2020

Program hotrotinhoc;

var d,n,i: byte;

a: array[1..100] of byte;

begin

write('N='); readln(n);

d:=0;

for i:=1 to n do

begin

write('a[',i,']='); readln(a[i]);

if a[i] mod 2=0 then inc(d);

end;

write('Mang vua nhap la :');

for i:=1 to n do write(a[i],' ');

writeln;

write('So phan tu chan la : ',d);

readln

end.

Bài 1: Phân số tối giản. Cho 2 số nguyên dương A, B (1 ≤ A, B ≤ 109). Hãy tìm phân số tối giản của phân số . Dữ liệu vào: (PSTG.INP) + Dòng 1: Ghi hai số tự nhiên A và B, mỗi số cách nhau ít nhất một ký tự trắng. Dữ liệu ra: (PSTG.OUT) + Dòng 1: Ghi hai số tự nhiên tương ứng là tử số và mẫu số của phân số tối giản. Ví dụ: PSTG.INP PSTG.OUT 25 30 5 6 16 ...
Đọc tiếp

Bài 1: Phân số tối giản.

Cho 2 số nguyên dương A, B (1 ≤ A, B ≤ 109). Hãy tìm phân số tối giản của phân số .

Dữ liệu vào: (PSTG.INP)

+ Dòng 1: Ghi hai số tự nhiên A và B, mỗi số cách nhau ít nhất một ký tự trắng.

Dữ liệu ra: (PSTG.OUT)

+ Dòng 1: Ghi hai số tự nhiên tương ứng là tử số và mẫu số của phân số tối giản.

Ví dụ:

PSTG.INP PSTG.OUT

25 30 5 6

16 21 16 21

Bài 2: Dãy số đối xứng.

Cho dãy gồm n số nguyên dương ( ). Dãy gồm k phần tử liên tiếp được gọi là dãy con của dãy ban đầu. Ví dụ: Dãy 2, 1, 4 là dãy con của dãy 1, 3, 2, 1, 4, 9.

Số đối xứng là số viết theo thứ tự ngược lại vẫn bằng chính nó. Số có một chữ số được coi là số đối xứng. Ví dụ: Các số 1221, 99, 282, 8 là số đối xứng; các số 12, 98, 199 không là số đối xứng.

Yêu cầu: Cho trước dãy số, hãy tìm dãy con dài nhất có các phần tử là số đối xứng.

Dữ liệu vào: (DSDX.INP)

+ Dòng 1: Ghi một số tự nhiên n là độ dài dãy số.

+ Dòng 2: Ghi n số nguyên dương, mỗi số cách nhau một ký tự trắng .

Dữ liệu ra: (DSDX.OUT)

+ Dòng 1: Ghi một số tự nhiên là độ dài dãy số dài nhất thoả mãn điều kiện. Nếu không có thì ghi -1.

+ Dòng 2: Ghi dãy số tìm được. Nếu có nhiều dãy số thoả mãn thì lấy dãy số đầu tiên tính từ bên trái.

Ví dụ:

DSDX.INP DSDX.OUT

10 44 343 567765

23 44 343 567765 43 233 98 21 989 888 3

5 87 901 223 3212 83 -1

Bài 3: Giá trị biểu thức

Cho một xâu chỉ chứa các kí tự: chữ số, dấu cộng, dấu trừ, thể hiện một biểu thức số học.

Yêu cầu: Tính giá trị của biểu thức đã cho. Biết xâu biểu thức không quá 255 kí tự, các số hạng và giá trị của biểu thức có độ lớn không quá 2.106.

Dữ liệu vào: (GTBT.INP)

+Dòng 1: Ghi duy nhất một xâu kí tự thể hiện biểu thức cần tính.

Dữ liệu ra: (GTBT.OUT)

+Dòng 1: Ghi duy nhất một số nguyên là giá trị của biểu thức.

Ví dụ:

GTBT.INP GTBT.OUT

12+23-45+6 -4

1234-998+123-345 14

Bài 4: Xếp diêm.

Bờm là một người rất thích chơi trò chơi xếp diêm. Từ các que diêm, Bờm có thể tạo ra các số theo cách xếp:

Một hôm khi Bờm đang ngồi xếp các chữ số thì Cuội đi qua. Cuội đố: “Tớ cho trước cậu n que diêm, cậu hãy xếp thành một số tự nhiên nhỏ nhất, một số tự nhiên lớn nhất từ n que diêm đó được không?”. Bờm suy nghĩ một lát rồi cũng nghĩ ra cách xếp. Vậy theo em, Bờm đã xếp như thế nào? Hãy lập trình để giải bài toán này nhé.

Yêu cầu: Cho trước n que diêm, hãy xếp n que diêm đó thành một số tự nhiên nhỏ nhất, một số tự nhiên lớn nhất có thể. (Lưu ý: Mọi số 0 đứng trước các số tự nhiên đều không có nghĩa)

Dữ liệu vào: (DIEM.INP)

+ Dòng 1: Ghi duy nhất một số tự nhiên n.

Dữ liệu ra: (DIEM.OUT)

+ Dòng 1: Ghi số tự nhiên nhỏ nhất xếp được.

+ Dòng 2: Ghi số tự nhiên lớn nhất xếp được.

Ví dụ:

DIEM.INP DIEM.OUT

18 208

11111111

25 2088

711111111111

2
2 tháng 10 2019

Bài 1:

program pstg;
uses crt;
var a,b,i,u : integer;
f : text;
BEGIN
clrscr;
assign(f,'PSTG.INP');
reset(f);
read(f, a);
read(f, b);
u:=1;
for i:= 1 to a do if ((a mod i)=0) and ((b mod i)=0) and (i>u) then u:=i;
a:= a div u;
b:= b div u;
assign(f,'PSTG.OUT');
rewrite(f);
write(f, a,' ',b);
close(f);
END.

13 tháng 10 2019

bài 4 dễ ẹt à

uses crt;
const fi='quediem.inp';
fo='quediem.out';
var i,m,n,d,x,j,csc:longint;
a,b:array[1..1000]of integer;
f1,f2:text;
begin
clrscr;
assign(f1,fi); reset(f1);
assign(f2,fo); rewrite(f2);
readln(f1,n);
{-------------------------tim-so-lon-nhat--------------------------}
write(f2,'so lon nhat la: ');
m:=n;
if m mod 2=0 then
begin
for i:=1 to n div 2 do
write(f2,'1');
end
else begin
write(f2,'7');
for i:=2 to n div 2 do
write(f2,'1');
end;
{----------------------------tim-so-nho-nhat------------------------}
writeln(f2);
a[1]:=2; b[1]:=1;
a[2]:=5; b[2]:=2;
a[3]:=4; b[3]:=4;
a[4]:=6; b[4]:=6;
a[5]:=3; b[5]:=7;
a[6]:=7; b[6]:=8;
d:=(n div 7)+1;
if n mod 7=0 then d:=d-1;
if d=1 then begin
case n of
2:write(f2,'so nho nhat la: ',1);
3:write(f2,'so nho nhat la: ',7);
4:write(f2,'so nho nhat la: ',4);
5:write(f2,'so nho nhat la: ',2);
6:write(f2,'so nho nhat la: ',0);
7:write(f2,'so nho nhat la: ',8);
end;
end;
if d>1 then
begin
write(f2,'so nho nhat la: ');
for i:=1 to d do
if i=1 then begin
b[4]:=6;
for j:=1 to 6 do
begin
x:=n;
x:=x-a[j];
csc:=x div 7+1;
if x mod 7=0 then csc:=csc-1;
if csc=d-i then begin
write(f2,b[j]);
n:=x;
break;
end;
end;
end
else begin
a[1]:=6; b[1]:=0;
a[2]:=2; b[2]:=1;
a[3]:=5; b[3]:=2;
a[4]:=4; b[4]:=4;
a[5]:=3; b[5]:=7;
a[6]:=7; b[6]:=8;
for j:=1 to 6 do
begin
x:=n;
x:=x-a[j];
csc:=(x div 7)+1;
if x mod 7=0 then csc:=csc-1;
if csc=d-i then begin
write(f2,b[j]);
n:=x;
break;
end;
end;
end;
end;
close(f1);
close(f2);
readln;
end.

30 tháng 10 2017

\(\dfrac{14}{7}hay\dfrac{17}{7}?\)

30 tháng 10 2017

\(\dfrac{14}{7}\)

25 tháng 12 2019

1: tính tổng của \(S=1+\frac{1}{2^2}+\frac{1}{3^2}+\frac{1}{4^2}+...+\frac{1}{100^2}\)

uses crt;

var s:real;

i:integer;

begin

clrscr;

s:=0;

for i:=1 to 100 do

s:=s+1/(sqr(i));

writeln('tong cua day so la: ',s);

readln;

end.

2: tính tổng \(S=1+\frac{1}{3^2}+\frac{1}{5^2}+\frac{1}{7^2}+...+\frac{1}{n^2}\)

uses crt;

var s:real;

n,i:integer;

begin

clrscr;

write('n='); readln(n);

s:=0;

for i:=1 to n do

if i mod 2=1 then s:=s+1/(sqr(i));

writeln('tong cua day so la: ',s:4:2);

readln;

end.

25 tháng 12 2019

Hỏi đáp Tin họcHỏi đáp Tin học

15 tháng 5 2021

Bài 1. Để lưu văn bản ta thực hiện lệnh   File → Save, nhấn tổ hợp phím Ctrl+S, nháy chuột vào nút lệnh trên thanh công cụ.

Bài 2. Lệnh Insert → Break → Page break  dùng để: Ngắt trang

Bài 3. Để mở hộp thoại Find and Replace ta nhấn tổ hợp phím 

  • Ctrl + F
  •  Ctrl + H

Bài 4. Mạng Wide Area Network  là mạng Mạng diện rộng (WAN - Wide Area Networklà mạng kết nối những máy tính ở cách nhau những khoảng cách lớn. Mạng diện rộng thường liên kết mạng cục bộ. ... Các máy tính và thiết bị có thể ở các thành phố, đất nước khác nhau, khắp lục địa nối kết với nhau (khoảng cách hàng nghìn km).

Bài 5. Internet Explore và Google Chrome là các trình duyệt wed

PHẦN C - TỰ LUẬN

Câu 1: Phân biệt trang web tĩnh và trang web động.

- Website tĩnh là website chỉ bao gồm các trang web tĩnh và không có cơ sở dữ liệu đi kèm.
- Web động là thuật ngữ được dùng để chỉ những website có cơ sở dữ liệu và được hỗ trợ bởi các phần mềm phát triển web.

Câu 2: Internet là gì? Nêu 3 cách kết nối Internet mà em biết.

Internet là mạng máy tính khổng lồ, kết nối hàng triệu máy tính, mạng máy tính trên khắp thế giới và sử dụng bộ giao thức truyền thông TCP/IP.

Các cách để kết nổi Internet đó là:

• Sử dụng môđem qua đường điện thoại;

• Sử dụng đường truyển riêng;

• Sử dụng đường truyền ADSL;

• Sử dụng công nghệ không dây Wi-Fi;

• Sử dụng đường truyền hình cáp


 

15 tháng 5 2021

Phần B

Bài 1

để lưu văn bản ta thực hiện lệnh: File ---> Save 

Bài 2

Lệnh Insert --> Break --> Page Break dùng để: ngắt trang

Bài 3

Để mở hộp thoại Find and Replace ta nhấn tổ hợp phím: Ctrl + H

Bài 4 

Mạng Wide Area Network là mạng: diện rộng

Bài 5

Internet Explore và Google Chrome là các trình duyệt web

Phần C 

Câu 1

Web tĩnh đơn thuần chỉ là website không có hệ thống quản lý nội dung, hoặc có nhưng nội dung trên website không thể thay đổi được

Web động tức là website có hệ thống quản lý nội dung nên người dùng có thể thay đổi nội dung

Câu 2

3 cách kết nối Internet:

Sử dụng modem qua đường điện thoại

Sử dụng công nghệ mạng không dây

Sử dụng đường truyền riêng

Internet là hệ thống thông tin toàn cầu có thể được truy nhập cộng đồng các mạng gồm các mạng máy tính được liên kết với nhau. Dựa trên bộ giao thứ TCP/IP

31 tháng 10 2019

quá dễ

bài 1:

uses crt;
var a,b:integer;
begin
clrscr;
write('a='); readln(a);
write('b='); readln(b);
if a=0 then
if b=0 then writeln('phuong trinh co vo so nghiem')
else writeln('phuong trinh vo nghiem')
else writeln('phuong trinh co nghiem x=',-b/a:4:2);
readln;
end.

bài 2:

uses crt;
var x,y,a,b,ucln:integer;
{---------------------------------------------------------}
procedure nhap(var n:integer);
begin
write('nhap mot so nguyen bat ky='); readln(n);
end;
{---------------------------------------------------------}
procedure rutgon(var a,b:integer);
var x,y,ucln:integer;
begin
x:=a;
y:=b;
while x<>y do
begin
if x>y then x:=x-y
else y:=y-x;
end;
ucln:=x;
if ucln<>1 then
begin
a:=a div ucln;
b:=b div ucln;
writeln('phan so toi gian la: ',a,'/',b);
end
else writeln('phan so toi gian la: ',a,'/',b);
end;
{----------------------------------------------------------}
begin
clrscr;
nhap(a);
nhap(b);
rutgon(a,b);
readln;
end.

11 tháng 3

rút ko kịp


7 tháng 4

def generate_sequence(n):

"""Generates the sequence A up to the nth term."""


if n < 0:

return "Please enter a non-negative number."


sequence = [] # This list will hold our sequence


if n >= 0:

sequence.append(1) # A[0] = 1


if n >= 1:

sequence.append(3) # A[1] = 3


for i in range(2, n + 1):

# Calculate A[i] using the rule: A[i] = A[i-1] * 2 * A[i-2]

next_term = sequence[i - 1] * 2 * sequence[i - 2]

sequence.append(next_term)


return sequence


# Let's see the sequence up to the 5th term (A[0] to A[5])

result = generate_sequence(5)

print(result) # Output: [1, 3, 6, 36, 432, 31104]

uses crt;

var x,y,z:real;

begin

clrscr;

write('Nhap x='); readln(x);

write('Nhap y='); readln(y);

z:=abs(1-sqr(x))+abs(1-sqr(y));

writeln('Z=',z:4:2);

readln;

end.

9 tháng 10 2020

mik làm cả 2 bằng 1 ct nha

var x,y,z1,z2:real;

begin

write(' Nhap x: ');readln(x);

write(' Nhap y: ');readln(y);

z1:=abs(1-sqr(x)) + abs(1-sqr(y));

z2:=abs(1-exp(x)) + abs(1-exp(y));

writeln(' KQ b1 :' ,z1:0:1);

writeln('KQ b2: ',z2:0:1);

readln;

end.