Hướng dẫn giải của 2023B. Tổng kết cuối năm
Nộp một lời giải chính thức trước khi tự giải là một hành động có thể bị ban.
Tác giả:
Gợi ý 1
Đây là một bài toán thao tác trên lịch cơ bản.
Gợi ý 2
Ta có thể sử dụng nhiều câu lệnh if else miễn sao là ra được kết quả đúng là được
Gợi ý 3
Ta cũng có thể duyệt trâu nếu muốn bởi vì số lượng testcase bài này rất nhỏ, và mỗi test case ta duyệt với độ phức tạp là n=365. Đủ để Accept bài này.
Gợi ý 4
Ta cũng có thể lưu một mảng 2 chiều, tương ứng với ngày, tháng của năm 2023 thì ứng với thứ mấy.
Gợi ý
Ta cũng có thể lưu một mảng để biết được tháng X có bao nhiêu ngày...
Lời giải
Bài này ta có thể làm như sau. Thứ nhất ta sẽ coi như điểm xuất phát là ngày 1/1/2023 và thứ hiện tại là Chủ nhật. Tiếp đó ta duyệt vòng lặp for để tăng ngày lên 1. Nếu ngày hiện tại lớn hơn số lượng ngày của tháng hiện tại, thì gán ngày đó là ngày 1, và tăng tháng lên 1. Tiếp đó là nếu tháng hiện tại lớn hơn 12 thì tăng năm lên 1. Ta không quên tăng các thứ trong tuần lên 1. Và nó sẽ có chu kì là 7 ngày 1 tuần. Ta có thể thực hiện phép chia mod để có được kết quả này. Tiếp đó là khi đạt đến ngày yêu cầu thì ta chỉ cần thoát vòng lặp for và in ra đáp án thích hợp
Dưới đây là một đoạn code đã Accept bài này
/**
* Create: Thursday 2023-12-21-20.58.59 GMT+7
* Title : tong ket cuoi nam
* Author:
*****/
#include <bits/stdc++.h>
#line 10 "tranxuantruong"
#ifndef MY_TEMPLATE
#define TranXuanTruong main()
#define Get_better(...) ios::sync_with_stdio(0); cin.tie(0);
using namespace std;
template <typename T> ostream& operator << (ostream& os, const stack <T> &stack_) {os << "["; int n = (int) stack_.size(); vector <T> archive (n); stack <T> stackCopy_ (stack_); for (int i=0; i<n; ++i) {archive[stackCopy_.size()-1]=stackCopy_.top(); stackCopy_.pop();} if (!archive.empty()) {for (auto it=archive.begin(); it!=archive.end()-1; ++it) {os <<*it <<", ";} os <<archive.back();} os <<" "; return os;}
template <typename T> ostream& operator << (ostream& os, const queue <T> &queue_) {os << "->["; int n = (int) queue_.size(); vector <T> archive (n); queue <T> queueCopy_ (queue_); for (int i=0; i<n; ++i) {archive[queueCopy_.size()-1]=queueCopy_ .front(); queueCopy_.pop();} if (!archive.empty()) {for (auto it=archive.begin(); it!=archive.end()-1; ++it) {os <<*it <<", ";} os <<archive.back();} os <<" "; return os;}
template <typename T> ostream& operator << (ostream& os, const priority_queue <T,vector<T>,greater<T>>&Queue_) {os << "["; int n = (int) Queue_.size(); vector <T> archive (n); priority_queue<T,vector<T>,greater<T>> QueueCopy_ (Queue_); for (int i=0; i<n; ++i) {archive[QueueCopy_.size()-1]=QueueCopy_.top(); QueueCopy_.pop();} if (!archive.empty()) {for (auto it=archive.begin(); it!=archive.end()-1; ++it) {os <<*it <<", ";} os <<archive.back();} os <<" "; return os;}
template <typename T> ostream& operator << (ostream& os, const priority_queue <T> &Queue_) {os << "["; int n = (int) Queue_.size(); vector <T> archive (n); priority_queue<T> QueueCopy_ (Queue_); for (int i=0; i<n; ++i) {archive[QueueCopy_.size()-1]=QueueCopy_.top(); QueueCopy_.pop();} if (!archive.empty()) {for (auto it=archive.begin(); it!=archive.end()-1; ++it) {os <<*it <<", ";} os <<archive.back();} os <<" "; return os;}
template <typename T> ostream& operator << (ostream& os, const vector <T> &vector_) {os << "["; if (!vector_ .empty()) {for (auto it = vector_ .begin(), i=0; i< (int) vector_ .size()-1; ++i, ++it) {os <<*it <<", ";} os << * (vector_ .rbegin());} os << "]"; return os;}
template <typename T> ostream& operator << (ostream& os, const deque <T> &deque_) {os << "["; if (!deque_ .empty()) {for (auto it = deque_ .begin(), i=0; i< (int) deque_ .size()-1; ++i, ++it) {os <<*it <<", ";} os << * (deque_ .rbegin());} os << "]"; return os;}
template <typename T> ostream& operator << (ostream& os, const set <T> &set_) {os << "["; if (!set_ .empty()) {for (auto it = set_ .begin(), i=0; i< (int) set_ .size()-1; ++i, ++it) {os <<*it <<", ";} os << * (set_ .rbegin());} os << "]"; return os;}
template <typename T> ostream& operator << (ostream& os, const multiset <T> &multiSet_) {os << "["; if (!multiSet_.empty()) {for (auto it = multiSet_.begin(), i=0; i< (int) multiSet_ .size()-1; ++i, ++it) {os <<*it <<", ";} os << * (multiSet_ .rbegin());} os << "]"; return os;}
template <typename T, typename _> ostream& operator << (ostream& os, const map <T, _> &map_) {os << "["; if (!map_ .empty()) {for (auto it = map_ .begin(), i=0; i< (int) map_ .size()-1; ++i, ++it) {os <<*it <<", ";} os << * (map_ .rbegin());} os << "]"; return os;}
template <typename T, typename _> ostream& operator << (ostream& os, const multimap <T, _> &multiMap_) {os << "["; if (!multiMap_.empty()) {for (auto it = multiMap_.begin(), i=0; i< (int) multiMap_ .size()-1; ++i, ++it) {os <<*it <<", ";} os << * (multiMap_ .rbegin());} os << "]"; return os;}
template <typename T, typename _> ostream& operator << (ostream& os, const pair <T, _> &pair_) {os << "{"; {os <<pair_.first; os <<":"; os <<pair_.second;} os << "}"; return os;}
template <typename T> void quick_debug (ostream& os, const char *name, const T &value) {os <<" " << name <<" = " <<value <<endl <<endl;};
template <typename T, typename... Args> void quick_debug (ostream& os, const char *name, const T &value, Args&&... args) {os <<" "; while (*name != ',') {os << *name++;} os << " = " << value << endl; quick_debug (os, name + 1, args...);};
; istream& operator >> (istream& is, __int128 & x) { __int128 sign=1; x=0; char c=is.get(); for( ;!isdigit(c); ){if(c=='-'){sign=-1;}c=is.get();} for( ;isdigit(c); ){x=(x<<3)+(x<<1)+(c^'0');c=is.get();} x*=sign; return is; }
; ostream& operator << (ostream& os, __int128 x) { if(x==0){return os<<"0";} int sign=1; if(x<0){sign=-1; x=-x;} string s=""; for( ;x!=0; ){s+='0'+x%10;x/=10;} if(sign<0){s+='-';} reverse(s.begin(), s.end()); return os<<s;}
#define endl '\n'
#define int __int128
#define hien(...) cerr <<__LINE__ <<" " __FILE__ ":" <<endl; quick_debug (cerr, " "#__VA_ARGS__, __VA_ARGS__)
#endif
TranXuanTruong{
Get_better(học thêm một chút nữa đi, 9000);
vector <int> thang = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
vector <int> ngay = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
vector <string> ans = {"T_BAY", "CHU_NHAT", "T_HAI", "T_BA", "T_TU", "T_NAM", "T_SAU"};
map <int,map<int,string>> year2023;
function <void()>
khoiTao = [&](){
int dow=1;
int dd=1;
int mm=1;
int yyyy=2023;
for( ;yyyy==2023; ){
year2023[mm][dd]=ans[dow];
dow=(dow+1)%7;
dd+=1;
if(dd>ngay[mm]){
dd=1;
mm+=1;
}
if(mm>12){
mm=1;
yyyy+=1;
}
}
};
khoiTao();
int t; cin >> t;
for(int i=0; i<t; ++i){
int dd; cin >> dd;
int mm; cin >> mm;
int yyyy; cin >> yyyy;
cout <<year2023[mm][dd] <<endl;
}
return 0;
}
Bình luận