--- tags: Note title: BT CF author: CppCodingClub (kiên,Văn,Quân); license: Public Use --- :::info :::spoiler Table of contents [TOC] ::: :::danger 🎯 **Mục tiêu:** 5 bài Code + Note ::: success # Problems 1: A.Diagonals # <a href="https://codeforces.com/contest/1995/problem/A">Link here (nsfw).</a> ```cpp= /* * * author: maxwell/someone * create: 10/08/2024: || 22:22 * */ using namespace std; #include <bits/stdc++.h> #include <iostream> #include <string> #define it int #define itm int main() itm{ it t; cin >>t; while(t--){ it n,k; cin>>n>>k; if(k==0){ cout<<k<<endl; } else if(k<=n){ cout<< '1'<<endl; } else{ int count=1; k=k-n; for(it i=1;i<n;i++){ k=k-(n-i); count++; if(k<=0){ cout<< count<<endl; break; } else{ k=k-(n-i); count++; if(k<=0){ cout<< count <<endl; break; } } } } } } ``` Note: 1.Cho một bàn cờ kích thước n x n và có k quân cờ được đặt trên ô bất kỳ của bàn cờ. 2.Một đường chéo được xác định bởi các cột là như nhau.(i+k). 3.Nhiệm vụ là tìm số lượng ít nhất các đường chéo có ít nhất một quân cờ sau khi sắp xếp tất cả k quân cờ mai ghi tiếp mệt quá làm comment chết r. sol: tính tổng số đường chéo trên bàn cờ theo công thức tỉ lệ nxn và 2n-1 đặt Đặt k quân cờ lên bàn sao cho số đường chéo bị chiếm là ít nhất. :::sucess # Problem 2: Password **Link problem**: https://codeforces.com/problemset/problem/1743/A ```cpp= //author: XK #include <iostream> using namespace std; const int eachpair=6; void cinarr(int M[],int n) { for(int i=0;i<n;i++) cin>>M[i]; } * void solve(int n) { int sum=0; for(int i=1;i<10-n;i++) { sum+=i; } cout<<sum*eachpair<<'\n'; } int main() { int t;cin>>t; while(t--) { int n;cin>>n;int M[n];cinarr(M,n); solve(n); } } ``` Note: **Yêu cầu**: Tìm tổng số password mà Monocarp đã quên sao cho mỗi password có định dạng có gồm 4 chữ số, 2 chữ số khác nhau lặp lại 2 lần. Monocarp sẽ đưa cho ta các chữ số không nằm trong password. **Solution**: Mỗi một cặp số sẽ tạo thành 6 số như định dạng trên nên ta chỉ cần tính tổng số cặp sẽ được tạo thành sau đó nhân với 6. # <H1>Problem 3</H1><h1> Tổng X **Link problem**: https://codeforces.com/problemset/problem/1676/D ```cpp= //author: XK #include <iostream> #include <vector> using namespace std; void cinarr(vector<vector<int>> &vm,int n,int m) { for(int i=0;i<n;i++) { for(int j=0;j<m;j++) { cin>>vm[i][j]; } } } void solve(vector<vector<int>> &vm,int n,int m) { int ans=0; for(int i=0;i<n;i++) { for(int j=0;j<m;j++) { int sum=vm[i][j],tempi=i,tempj=j; while(i!=0&&j!=0) { sum+=vm[i-1][j-1];i--;j--; } i=tempi;j=tempj; while(i!=0&&j!=m-1) { sum+=vm[i-1][j+1];i--;j++; } i=tempi;j=tempj; while(i!=n-1&&j!=0) { sum+=vm[i+1][j-1];i++;j--; } i=tempi;j=tempj; while(i!=n-1&&j!=m-1) { sum+=vm[i+1][j+1];i++;j++; } i=tempi;j=tempj; if(sum>ans) ans=sum; } } cout<<ans<<'\n'; } int main() { int t;cin>>t; while(t--) { int n,m;cin>>n>>m;vector<vector<int>> vm(n,vector<int>(m)); cinarr(vm,n,m); solve(vm,n,m); } } ``` Note: **Yêu cầu**: Cho 1 bàn cờ, tìm vị trí trong các ô cờ để đặt quân tượng sao cho tổng số các số mà mỗi ô quân tượng có thể chiếm là lớn nhất. **Solution**: tạo mảng 2 chiều, sau đó dùng vòng lặp while đi chéo lên trên hoặc xuống để tính tổng. # Problem 4: Minimums and Maximums ```cpp= /** * author: TomDev * created: 2024-08-11 12:11:08 * country: Vietnam **/ #include <iostream> #include <algorithm> using namespace std; int main(){ int tc; cin >> tc; int a, b, c, d; while(tc--){ cin >> a >> b >> c >> d; if(max(a,c) > min(b,d)){ cout << a + c << endl; } else{ cout << max(a,c) << endl; } } } ``` ## Cách giải: - Tính số lớn nhất của l~1~ và l~2~, nếu vượt quá giá trị max của 1 trong r1 và r2 --> in ra l~1~ + l~2~ (do không thể dùng chung 1 số được) - Nếu không vượt quá giá trị cho phép --> in ra số lớn nhất của l~1~, l~2~ (Do có thể dùng chung một số) [Submission](https://codeforces.com/contest/1680/submission/275693191) # Problem 5: Download more RAM ```cpp= /** * author: TomDev * created: 2024-08-11 13:46:04 * country: Vietnam **/ #include <iostream> #include <utility> #include <vector> #include <algorithm> using namespace std; int main(){ int tc; cin >> tc; int n, k; while(tc--){ cin >> n >> k; vector<pair<int,int>> a(n); for (int i = 0; i < n; i++){ cin >> a[i].first; } for (int i = 0; i < n; i++){ cin >> a[i].second; } sort(a.begin(), a.end()); for (int i = 0; i < n; i++){ if(k >= a[i].first){ k += a[i].second; } else{ break; } } cout << k << endl; } } ``` ## Cách giải: - Áp dụng pair để giải bài, lấy input tương ứng - Để có được số RAM nhiều nhất --> Lấy software ít tốn tài nguyên nhất --> Dùng sort - Cộng RAM có được vào k cho đến khi nào tài nguyên vượt quá giới hạn [Submission](https://codeforces.com/contest/1629/submission/275697163) # Problem 6: Upload more RAM ```cpp= /** * author: TomDev * created: 2024-08-11 14:08:08 * country: Vietnam **/ #include <iostream> using namespace std; int main(){ int tc; cin >> tc; while(tc--){ long long int target, interval; cin >> target >> interval; cout << (target * interval) - (interval-1) << endl; } } ``` ## Cách giải: - Gọi interval là thời gian cần để upload 1 gb - Quy luật, mỗi interval **CHỈ** có thể upload 1 gb, còn lại là 0 gb nên sẽ tốn thêm tg => Để lấy thời gian ngắn nhất --> bỏ các giây upload 0 gb ở interval cuối cùng [Submission](https://codeforces.com/contest/1987/submission/275698841)