/img/dodola.png

一只小菜鸡的Blog

Codeforces Round 931(div2)

A-Too Min Too Max

对一个数组,找到索引$(i,j,k,l)$使得$|a_i-a_j|+|a_j-a_k|+|a_k-a_l|+|a_l-a_i|$最大的值。

$t(1≤t≤500)$

$n(4≤n≤100)$​

$a_i(-10^6\le a_i\le 10^6)$

选则最大的两个数和最小的两个数,结果为最大-最小+次大-最小+最大-次小+次大-次小。

1
2
3
4
5
6
7
8
void solve() {
    int n;cin >> n;
    vector<ll>a(n);
    for (int i = 0;i < n;i++)
        cin >> a[i];
    sort(a.begin(), a.end());
    cout << a[n - 1] - a[0] + a[n - 2] - a[0] + a[n - 1] - a[1] + a[n - 2] - a[1] << '\n';
}

B-Yet Another Coin Problem

有一些5种不同面值的金币,面值有:$1,3,6,10,15$。找到使用金币数目最少的组合方式达到数值为$n$的组合。

$t(1≤t≤10^4)$

$n(1≤n≤10^9)$​

打表。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
void solve() {
    ll n;cin >> n;
    vector<ll>p = { 0,
    1,2,1,2,3,1,2,3,2,1,
    2,2,2,3,1,2,3,2,3,2,
    2,3,3,3,2,3,3,3,4,2
    };
    ll ans = n / 15 + p[n % 15];
    if (n / 15 > 0)
        ans = min(ans, n / 15 - 1 + p[n % 15 + 15]);
    cout << ans << endl;

}

C-Find a Mine

交互题。

Codeforces Round 932(div2)

A-Entertainment in MAC

可以对一个字符串进行两种操作:

  1. 将字符串反转
  2. 将该字符串反转后接在原串的后面。

可以进行任意次上述操作,获得字典序最小的字符串。

$t(1≤t≤500)$

$n(2≤n≤10^9)$​

$s(1\le |s|\le 100)$

对比反转前后的字符串字典序大小,再决定是操作1还是操作2

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
void solve() {
    ll n;cin >> n;
    string s;cin >> s;
    string t = s;
    reverse(t.begin(), t.end());
    if (s > t) {
        cout << t << s << endl;
    }
    else {
        cout << s << endl;
    }
}

B-Informatics in MAC

$MEX$:不属于该数组的最小非负整数。

Codeforces Round 933(div3)

A-Rudolf and the Ticket

左边口袋有一些面值为$b_1,b_2,b_3,…,b_n$的硬币,右边有一些面值为$c_1,c_2,c_3,…,c_m$的硬币,问有多少个$(f,s)$可以使得$b_f+c_s\le k$成立

$t(1≤t≤100)$

$n,m(1≤n,m≤100)$

$k(1\le k\le 2000)$

$b_i,c_i(1\le b_i,c_i\le 1000)$

双层循环遍历

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
void solve() {
    ll n, m, k;cin >> n >> m >> k;
    vector<ll>b(n), c(m);
    for (ll i = 0; i < n; i++) cin >> b[i];
    for (ll i = 0; i < m; i++) cin >> c[i];
    ll ans = 0;
    sort(b.begin(), b.end());
    sort(c.begin(), c.end());
    for (ll i = 0;i < n;i++) {
        for (ll j = 0;j < m;j++) {
            if (b[i] + c[j] <= k) {
                ans++;
            }
            else { break; }
        }
    }
    cout<<ans<<endl;
}

B-Rudolf and 121

可以对一个数组执行如下操作:

一个Vue项目的基础模板||PC端+移动端适配

1
2
3
4
npm create vite@latest dodola -- --template vue-ts
cd dodola
npm install
npm run dev

转到根目录下后

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
├── dist/
└── src/
    ├── api
    │   └── ... // 抽取出API请求
    ├── assets/                    // 静态资源目录
    ├── common/                    // 通用类库目录
    ├── components/                // 公共组件目录
    ├── routers/                   // 路由配置目录
    ├── store/                     // pinia 状态管理目录
        ├── index.ts               // 导出 store 的地方
        ├── home.ts                // 模块
        └── user.ts                // 模块
    ├── style/                     // 通用 CSS 目录
    ├── utils/                     // 工具函数目录
    ├── views/                     // 页面组件目录
    ├── App.vue
    ├── main.ts
    ├── vite-env.d.ts
├── index.html
├── tsconfig.json                  // TypeScript 配置文件
├── vite.config.ts                 // Vite 配置文件
└── package.json

vite.config.ts中,设置@指向src、服务器启动端口、打包路径、代理等等设置

Educational Codeforces Round 162(div2)

A-Moving Chips

每个单元格为空闲或有一个芯片,芯片可以向左移动到最近的空闲处(如果存在空闲格)。

现在有一排单元格,求问进行多少次移动,才能使得所有芯片集中在一起(中间没有空格)。

$t(1≤t≤1000)$

$n(2≤n≤50)$​

$a_i(a_i∈{1,0})$

统计数组中第一个1和最后一个1之间的0的数目。

Codeforces Round 929(div3)

A-Turtle Puzzle: Rearrange and Negate

对一个数组执行两个操作:

  1. 对数组进行重新排序或保持元素顺序不变
  2. 选择连续的一段,对该段中的元素取相反数,也可以不选择任何一段,即保持所有的元素符号不变。

求进行上述操作之后数组的最大和是多少。