Skip to content

Blog Công Nghệ

MENUMENU
  • Trang chủ
  • Giới Thiệu
  • Lập Trình
    • Lập Trình Website
      • Laravel
        • Phân Tích Dự Án
      • PHP
      • SQL
      • HTML
      • CSS
      • Javascipt
      • My Project
      • Wordpress
    • Luyện Skill
    • Lập trình winform
    • CSDL
    • Lập Trình Android
    • Trí tuệ nhân tạo
    • Khai Khoáng Dữ Liệu
    • Arduino
    • Khác
    • Đồ án
  • Phần Mềm
    • Powerpoint
    • Tool
  • Cuộc sống và Giải trí
    • Hợp âm
    • web5ngay - youtube
    • Công Giáo
    • Kỹ Năng Sống
    • Street Workout
  • Danh sách bài viết
  • Guide line
    • Guild line phỏng vấn
    • Guide lines Laravel
    • Guide line Module Frontend
  • Tóm tắt sách
  • Fanpage

Blog Công Nghệ

Nơi chia sẻ kiến thức

ntucoder – VERSUSGAME – Trò chơi đối kháng

18 Tháng Ba, 2020 by admin
Lượt xem: 57

Contents

  • 1. Nội dung đề bài
  • 2. Hiểu đề bài như thế nào?
    • Ví dụ:
  • 3. Cách tui giải và code
  • 4. Các test case cho đề bài
  • Kết Luận

1. Nội dung đề bài

  • Dữ liệu vào: standard input
  • Dữ liệu ra: standard output
  • Giới hạn thời gian: 1.0 giây
  • Giới hạn bộ nhớ: 128 megabyte

Hùng đang chơi một trò chơi võ thuật đối kháng, trong trò chơi này, bạn sẽ phải đánh bại các đối thủ bằng các kỹ năng của mình, ở mỗi vòng bạn sẽ thi đấu với một đối thủ, mỗi lần thi triển kỹ năng, bạn nhận được một số điểm kỹ năng nhất định. Đặc biệt, trong trò chơi này, nếu bạn đã đánh bại đối thủ thì bạn chưa chắc đã chiến thắng, bạn còn phải đạt được chính xác số điểm kỹ năng mà đối thủ quy định sao cho số lần thi triển kỹ năng là ít nhất. Sau đây là các kỹ năng bạn có thể sử dụng và số điểm kỹ năng giành được khi thi triển:

++ Đấm: sau khi đấm bạn sẽ có thêm 5 điểm

++ Nhảy: sau khi nhảy bạn sẽ có thêm 4 điểm

++ Đẩy: sau khi đẩy bạn sẽ có thêm 4 điểm

++ Kéo: sau khi kéo bạn sẽ có thêm 3 điểm

++ Đá trên không: sau khi đá trên không bạn sẽ có thêm 1 điểm

++ Đá: sau khi đá bạn sẽ có thêm 10 điểm

Tuy nhiên, các kỹ năng này không thể sử dụng một cách tùy ý mà nó còn có những quy tắc nhất định:

++ Sau khi đấm, bạn bắt buộc phải đá.

++ Sau khi nhảy, bạn bắt buộc phải đấm.

++ Sau khi đẩy, bạn bắt buộc phải đá trên không.

Vì mải chơi nên không thể tính toán được, bạn hãy giúp Hùng tính cách chơi tối ưu nhất nhé.

Input

Dòng thứ nhất là số nguyên T – số vòng của trò chơi (1 <= T <= 105)

T dòng tiếp theo, mỗi dòng là số nguyên N là số điểm kỹ năng bạn phải đạt được trong vòng chơi tương ứng (1 <= N <= 106)

Output

Gồm T dòng, mỗi dòng là số lần thi triển kỹ năng ít nhất để đạt được chính xác số điểm kỹ năng mà vòng chơi đó yêu cầu

2. Hiểu đề bài như thế nào?

Ví dụ:

//input
4
1
2
3
4

//output
1
2
1
2

Như dữ liệu, ta thấy có 4 vòng chơi:

   – Vòng 1: số điểm chính xác đạt được là: 1
     =>chỉ có 1 phương án là đá trên không.


   – Vòng 2: số điểm chính xác đạt được là: 2
     =>chỉ có 1 phương án là 2 lần đá trên không.


   – Vòng 3: số điểm chính xác đạt được là: 3
     =>chỉ có 2 phương án là 3 lần đá trên không và 1 lần kéo. Do đó đáp án là 1


   – Vòng 4: số điểm chính xác đạt được là: 4
     =>chỉ có 2 phương án là 4 đá trên không và (1 kéo + 1 đá trên không). Do đó đáp án là 2.


Ở vòng 4 bạn không thể chọn nhảy hoặc đẩy. Vì chọn nhảy bạn phải đấm => 9, còn đẩy bạn phải đá trên không => 5. Do đó loại 2 đáp án này.

3. Cách tui giải và code

Kỹ năng Đấm Nhảy Đẩy Kéo Đá Trên 0 Đá
index 1 2 3 4 5 6
value 5 4 4 3 1 10

Đây là dữ liệu ban đầu, giờ tui sẽ biến nó lại thành theo thứ tự giảm dần.

Kỹ năng Đá Đấm Nhảy Đẩy Kéo Đá Trên  0
index 1 2 3 4 5 6
value 10 5 4 4 3 1

Bảng quy tắc như sau:

Kỹ năng Đá Đấm Nhảy Đẩy Kéo Đá Trên  0
index 1 2 3 4 5 6
value -1 1 2 6 -1 -1

Từ những dữ liệu trên ta xây dựng được bảng như sau:

Value 1 3 5 10 15 19
Cần ? kỹ năng 1 1 2 1 2 3

Ví dụ nếu tui tìm được số trước là min(kỹ năng cần có để đạt được) thì số sau tui thêm 1 vào thì có thể là Số kỹ năng min.

Ban đầu tui chỉ có giá trị 1 để cộng zô.

Giờ tui có min1 = 1 là cần 1 kỹ năng, vậy 2 thì min1 cộng với 1 nữa là 2.

3 thì min2+1 = 3. Nhưng giờ t có giá trị là 1 và 3 để cộng zô. Zậy t chỉ cần lấy 1 kỹ năng có giá trị 3 là được value đề bài yêu cầu => min3 = 1.

4 thì min3+1 = 2. Mà giờ tui có giá trị 1 và 3 vậy tui chọn 3. min(4-3 =1)+1(kỹ năng có giá trị 3) = min1 + 1 = 2. => min4=2.

5 thì min4+1 = 3. Mà giờ t có 1, 3, 5 thì tui làm với 3 trước min(5-3 =2)+1 = min2+ 1 = 3. Tiếp tục tui thử với min(5-5 =0)+2(do 2 kỹ năng tạo nên giá trị) = min0+2= 2. Do đó min5 = 2.

 

#include <bits/stdc++.h>

#define IO ios_base::sync_with_stdio(false);

using namespace std;

const int SIZE = 10e6+1;
int T, n;
int f[SIZE];

void process()
{
    f[1] = 1;
    f[2] = 2;
    for (int i = 3; i <= SIZE; ++i) {
        f[i] = f[i-1] + 1;
        if (i >= 3) f[i] = min(f[i], f[i-3]+1);
        if (i >= 5) f[i] = min(f[i], f[i-5]+2);
        if (i >= 10) f[i] = min(f[i], f[i-10]+1);
        if (i >= 15) f[i] = min(f[i],f[i-15]+2);
        if (i >= 19) f[i] = min(f[i],f[i-19]+3);
    }
}

int main()
{
    IO;
    process();
	
    cin >> T;
    while (T--) {
        cin >> n;
        cout << f[n] << endl;
    }
    return 0;
}
    

4. Các test case cho đề bài

#test1
//input
10
808 250 74 659 931 273 545 879 924 710

//output
82
25
9
67
94
28
55
89
94
71

#test2
//Input
20 808 250 74 659 931 273 545 879 924 710 441 166 493 43 988 504 328 730 841 613

//Output
82
25
9
67
94
28
55
89
94
71
45
18
50
5
100
52
34
73
85
62

#test3
//Input
100 6808 5250 74 3659 8931 1273 7545 879 7924 7710 4441 8166 4493 3043 7988 2504 2328 1730 8841 2613 4304 3170 7710 7158 9561 934 3100 279 1817 5336 9098 7827 3513 9268 3811 7634 980 9150 6580 8822 1968 673 1394 9337 5486 1746 5229 4092 195 6358 5002 1154 6709 7945 5669 1491 8125 2197 9531 904 7723 4667 8550 8025 7802 6854 978 7409 8229 4934 299 8982 8636 8014 3866 9815 9064 4537 9426 1670 4116 ...

//Output
682
525
9
367
894
128
755
89
794
771
445
818
450
305
800
252
234
173
885
262
432
317
771
717
957
95
310
29
184
535
911
785
352
928
382
765
98
915
658
884
198
6...

#test4
//Input
100000 6808 5250 74 3659 8931 1273 7545 879 7924 7710 4441 8166 4493 3043 7988 2504 2328 1730 8841 2613 4304 3170 7710 7158 9561 934 3100 279 1817 5336 9098 7827 3513 9268 3811 7634 980 9150 6580 8822 1968 673 1394 9337 5486 1746 5229 4092 195 6358 5002 1154 6709 7945 5669 1491 8125 2197 9531 904 7723 4667 8550 8025 7802 6854 978 7409 8229 4934 299 8982 8636 8014 3866 9815 9064 4537 9426 1670 41 ...

//Output
682
525
9
367
894
128
755
89
794
771
445
818
450
305
800
252
234
173
885
262
432
317
771
717
957
95
310
29
184
535
911
785
352
928
382
765
98
915
658
884
198
6...

#test5
//Input
10 475249 612001 905329 420964 744900 857984 671936 370884 193929 568681

//Output
47526
61201
90534
42098
74490
85800
67195
37090
19394
56869

#test6
//Input
100 475249 612001 905329 420964 744900 857984 671936 370884 193929 568681 513600 567225 498064 413764 992169 385009 534929 729441 745600 782544 755809 582561 8681 482649 793600 490489 623801 757284 497856 762225 415409 846276 974144 157289 916100 682689 598441 964201 623241 910041 209089 891584 340449 480896 485225 145025 851984 716281 357636 931449 70001 849409 757264 907136 486224 820100 43937 ...

//Output
47526
61201
90534
42098
74490
85800
67195
37090
19394
56869
51360
56723
49808
41378
99218
38502
53494
72945
74560
78256
75582
58257
869
48266
79360
49050
62381
75730
49787 ...

#test7
//Input
1000 475249 612001 905329 420964 744900 857984 671936 370884 193929 568681 513600 567225 498064 413764 992169 385009 534929 729441 745600 782544 755809 582561 8681 482649 793600 490489 623801 757284 497856 762225 415409 846276 974144 157289 916100 682689 598441 964201 623241 910041 209089 891584 340449 480896 485225 145025 851984 716281 357636 931449 70001 849409 757264 907136 486224 820100 4393 ...

//Output
47526
61201
90534
42098
74490
85800
67195
37090
19394
56869
51360
56723
49808
41378
99218
38502
53494
72945
74560
78256
75582
58257
869
48266
79360
49050
62381
75730
49787 ...

#test8
//Input
10000 475249 612001 905329 420964 744900 857984 671936 370884 193929 568681 513600 567225 498064 413764 992169 385009 534929 729441 745600 782544 755809 582561 8681 482649 793600 490489 623801 757284 497856 762225 415409 846276 974144 157289 916100 682689 598441 964201 623241 910041 209089 891584 340449 480896 485225 145025 851984 716281 357636 931449 70001 849409 757264 907136 486224 820100 439 ...

//Output
47526
61201
90534
42098
74490
85800
67195
37090
19394
56869
51360
56723
49808
41378
99218
38502
53494
72945
74560
78256
75582
58257
869
48266
79360
49050
62381
75730
49787 ...

#test9
//Input
100000 475249 612001 905329 420964 744900 857984 671936 370884 193929 568681 513600 567225 498064 413764 992169 385009 534929 729441 745600 782544 755809 582561 8681 482649 793600 490489 623801 757284 497856 762225 415409 846276 974144 157289 916100 682689 598441 964201 623241 910041 209089 891584 340449 480896 485225 145025 851984 716281 357636 931449 70001 849409 757264 907136 486224 820100 43 ...

//Output
47526
61201
90534
42098
74490
85800
67195
37090
19394
56869
51360
56723
49808
41378
99218
38502
53494
72945
74560
78256
75582
58257
869
48266
79360
49050
62381
75730
49787 ...

#test10
//Input
10 1 2 3 4 5 6 7 8 100000 100001

//Output
1
2
1
2
2
2
3
3
10000
10001

#test11
//Input
4
1
2
3
4

//Output
1
2
1
2

Kết Luận

Bài viết sau mình sẽ chia sẻ với các bạn ROBOT5 – Robot đi tuần nhé.

Related posts:

  1. Ntucoder – GAO – Siêu nhân GAO
  2. Ntucoder – ROBOT5 – Robot đi tuần
  3. Ntucoder – BANHCHUNG – Nấu bánh chưng
  4. Trò chơi hay cho trẻ em

Post navigation

Previous Post:

Thời sinh viên làm sao để bức phá dẫn đầu – thầy Nguyễn Hoàng Khắc Hiếu

Next Post:

Ntucoder – ROBOT5 – Robot đi tuần

Trả lời Hủy

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

Ẩn sidebar

Tìm kiếm

Generic selectors
Exact matches only
Search in title
Search in content
Search in posts
Search in pages

Blog Công Nghệ

Bài viết mới

  • Master typescript
  • Sendmail trong Laravel sử dụng dịch vụ SES, SQS của Amazon
  • Install SSL in Nginx Ubuntu
  • Docker study
  • Bảo vệ: Hướng dẫn code bot Telegram easy game

Lượng truy cập

0074627
Visit Today : 223
Visit Yesterday : 178
This Month : 898
Who's Online : 1
© 2025 Blog Công Nghệ | WordPress Theme by Superbthemes