Codeforces Round 957 (Div. 3)

A. Only Pluses

Problem - A - Codeforces

题意:

Kmes 写了三个整数 a 、 b 和 c ,以便记住他必须给 Noobish_Monk a×b×c 香蕉。

Noobish_Monk 找到了这些整数,并决定做以下最多 5 次的事情:

  • 从这些整数中选择一个
  • 将它增加 11 。

例如,如果是 a=2 、 b=3 和 c=4 ,那么可以将 a 增加三次,再将 b 增加两次。之后是 a=5 、 b=5 、 c=4 。那么香蕉的总数就是 5×5×4=100 。

a×b×c的最大值是多少?Noobish_Monk通过这些运算可以得到的最大值是多少?

思路:

每次对最小的进行操作

AC代码:

#define _CRT_SECURE_NO_WARNINGS 1
#include<bits/stdc++.h>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<vector>
#include<math.h>
using namespace std;
typedef long long ll;
priority_queue<int, vector<int>, greater<int>> pq;
map<int, int>mp;
vector<int>q;
void solve()
{
	int x;
	q.clear();
	for (int i = 0; i < 3; i++)
	{
		cin >> x;
		q.push_back(x);
	}
	int num = 0;
	for (int i = 0; i < 5; i++)
	{
		sort(q.begin(), q.end());
		q[0]++;
	}
	cout << q[0] * q[1] * q[2] << endl;
}
int main()
{
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	int t;
	cin >> t;
	while(t--)
	{
		solve();
	}

	return 0;
}

B. Angry Monk

Problem - B - Codeforces

题目大意:

为了庆祝他的康复,k1o0n 烤了一个长达 n 米的巨大马铃薯砂锅。

结果,Noobish_Monk就是受不了土豆,所以他决定毁了 k1o0n 的大餐。他把土豆切成了 k 块,长度是 a1,a2,…,ak 米。

k1o0n 并不喜欢这样。幸运的是,一切都可以补救。为此,k1o0n 可以进行以下操作之一:

  • 选取长度为 ai≥2 的棋子,将其分成长度为 1 和 ai−1 的两个棋子。这样,棋子的数量将增加 1 ;
  • 选取长度为 ai 的一个片段和长度为 aj=1 的另一个片段( i≠j ),将它们合并为长度为 ai+1 的一个片段。这样,棋子的数量将减少 1 。

请帮助 k1o0n 找出将砂锅合并成长度为 n 的一块所需的最少操作数。

例如,如果 n=5、 k=2 和 a=[3,2],最佳操作如下:

  1. 将长度为 2 的棋子分成长度为 2−1=1 和 1 的两块,结果为 a=[3,1,1] 。
  2. 合并长度为 3 的棋子和长度为 1 的棋子,得到 a=[4,1] .
  3. 将长度为 4 的棋子与长度为 1 的棋子合并,得到 a=[5] 。
#define _CRT_SECURE_NO_WARNINGS 1
#include<bits/stdc++.h>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<vector>
#include<math.h>
using namespace std;
typedef long long ll;
priority_queue<int, vector<int>, greater<int>> pq;
map<int, int>mp;
int a[200010];
void solve()
{
	memset(a, 0, sizeof(a));
	int n, k;
	cin >> n >> k;
	for (int i = 1; i <= k; i++)
	{
		cin >> a[i];
	}
	int ans = 0;
	int tt = 0;
	int p;
	for (int i = 1; i <= k; i++)
	{
		if (a[i] > tt)
		{
			p = i;
			tt = a[i];
		}
	}
	for (int i = 1; i <= k; i++)
	{
		if (i != p)
		{
			if (a[i] == 1)
			{
				ans++;
			}
			else if(a[i]>1)
			{
				ans += a[i] - 1;
				ans += a[i];
			}
		}
	}
	cout << ans << endl;
}
int main()
{
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	int t;
	cin >> t;
	while(t--)
	{
		solve();
	}

	return 0;
}

思路:

以最大的为基准,把所有都累加到最大上面(为1时直接+1就行,>1时加上该值的两倍-1(分出1和把1合并是两步))

C. Gorilla and Permutation

Problem - C - Codeforces

思路:

其实巨简单(想得太多了反而做不出来),就是求一个最大的f和一个最小的g就行了,根据两个特殊值m和k就行,先输出所有>m且<=k的值(1~n,不能重复),输出<m的值要注意一下,因为我们要让g最小,即<m的要先输出小的再输出大的(因为最后都会得到相同的和,此时就必须要取小的)

AC代码:

#include<bits/stdc++.h>
#define ll long long
#define TEST int T;cin>>T;while(T--)
using namespace std;
void solve() {
    ll n,m,k;
    cin>>n>>m>>k;
    for(int i=n;i>=k;i--) cout<<i<<" ";
    for(int i=k-1;i>=m+1;i--) cout<<i<<" ";
    for(int i=1;i<=m;i++) cout<<i<<" ";
    cout<<"\n";
}
int main() {
    TEST 
    solve();
    return 0;
}


D. Test of Love

Problem - D - Codeforces

AC代码:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll n, m, t, h, k,a,b,c,ans, num, sum1,sum,sum2, cnt;
string s, ss;
void solve()
{
    cin >> n >> m >> k;
    cin >> s;
    s = " " + s;
    if (m > n) {
        cout << "YES" << endl;
        return;
    }
    else {
        ans = m;
        for (int i = 1; i <= n; i++) {
            if (ans <= 0) {
                cout << "NO" << endl;
                return;
            }
            if (s[i] == 'L')
                ans = m;
            if (s[i] == 'W') {
                if (k > 0) {
                    if (ans > 1)
                        ans--;
                    else {
                        ans = 1;
                        k--;
                    }
                }
                else
                    ans--;
            }
            if (s[i] == 'C')
                ans--;
        }
    }
    if (ans > 0)
        cout << "YES" << endl;
    else
        cout << "NO" << endl;
}
int main()
{
    cin >> t;
    while (t--)
        solve();
    return 0;
}

  • 23
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Codeforces Round 894 (Div. 3) 是一个Codeforces举办的比赛,是第894轮的Div. 3级别比赛。它包含了一系列题目,其中包括题目E. Kolya and Movie Theatre。 根据题目描述,E. Kolya and Movie Theatre问题要求我们给定两个字符串,通过三种操作来让字符串a等于字符串b。这三种操作分别为:交换a中相同位置的字符、交换a中对称位置的字符、交换b中对称位置的字符。我们需要先进行一次预处理,替换a中的字符,然后进行上述三种操作,最终得到a等于b的结果。我们需要计算预处理操作的次数。 根据引用的讨论,当且仅当b[i]==b[n-i-1]时,如果a[i]!=a[n-i-1],需要进行一次操作;否则不需要操作。所以我们可以遍历字符串b的前半部分,判断对应位置的字符是否与后半部分对称,并统计需要进行操作的次数。 以上就是Codeforces Round 894 (Div. 3)的简要说明和题目E. Kolya and Movie Theatre的要求。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [Codeforces Round #498 (Div. 3) (A+B+C+D+E+F)](https://blog.csdn.net/qq_46030630/article/details/108804114)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [Codeforces Round 894 (Div. 3)A~E题解](https://blog.csdn.net/gyeolhada/article/details/132491891)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值