---
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)