Hướng dẫn giải của 2023B. Tổng kết cuối năm


Chỉ dùng lời giải này khi không có ý tưởng, và đừng copy-paste code từ lời giải này. Hãy tôn trọng người ra đề và người viết lời giải.
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ả: tranxuantruong

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

Hãy đọc nội quy trước khi bình luận.


Không có bình luận tại thời điểm này.