首页 > 其他分享 >codeforces比赛(3):codeforces good_bye_2023

codeforces比赛(3):codeforces good_bye_2023

时间:2023-12-31 20:11:06浏览次数:34  
标签:good 题目 奇数 int codeforces solve 2023 const bye

A、2023

跳转原题点击此:A题地址

1、题目大意

  在一个乘积可能等于2023的数组a中去掉了k个数,得到新的长度为n的b数列。请你输出k个数,使得这k个数与b数列相乘为2023.如果不存在则输出No。

2、题目解析

  因为这道题的n和k都是不超过5,所以我们只需要算出b数组的乘积是否是2023的因数,不是就输出No,否则直接输出 \(2023/b数组的乘积\) 和 \(k-1\)个 1 即可。

3、具体代码

#include<bits/stdc++.h>

using namespace std;

typedef long long ll;

const int N = 100;

int T;
int n, k;
int f[N];

void solve()
{
	cin >> n >> k;
	ll ans = 1;
	for(int i = 1; i <= n; i++)
	{
		cin >> f[i];
		ans *= f[i];
	}
	if(2023 % ans != 0 || ans > 2023)
	{
		cout << "No\n";
		return;
	}
	cout << "Yes\n";
	cout << 2023 / ans << " ";
	k--;
	while(k--)
	{
		cout << 1 << " ";
	}
	cout << endl;
}

int main()
{
	cin >> T;
	while (T--)
	{
		solve();
	}

	return 0;
}

 

B、Two Divisors

跳转原题点击此:B题地址

1、题目大意

  给你两个数a和b(a<b),他们是x的最大约数(不包括x本身),如6的两个最大约数是2、3。

2、题目解析

  如果b不是a的倍数,那么答案就是a和b的最小公倍数(最小公倍数定义);
  如果b是a的倍数,那么lcm(a,b)就为b,不符合要求。而b/a说明这是b能获得的最大倍数,所以答案为\(b*(b/a)\)。(说实话我是看样例看出来的)

3、具体代码

#include<bits/stdc++.h>

using namespace std;

const int N = 2e5+10;

int T;
int a, b;
int f[N];

int gcd(int a, int b)
{
	return b ? gcd(b, a % b) : a;
}
int lcm(int a, int b)
{
	return a / gcd(a, b) * b;
}

void solve()
{
	cin >> a >> b;
	if(a % b != 0 && b % a != 0)
	{
		cout << lcm(a, b) << endl;
		return;
	}
	else
	{
		int tmp = b / a;
		cout << tmp * b << endl;
	}
}

int main()
{
	cin >> T;
	while (T--)
	{
		solve();
	}

	return 0;
}

 

C、Training Before the Olympiad

跳转原题点击此:C题地址

1、题目大意

  玛和奥两个人玩一个游戏,对一组数列中进行以下操作:
  选中\(a_i\) 和 \(a_j\),生成新的数x为\(\lfloor \frac{a_i + a_j}{2} \rfloor * 2\),并将\(a_i\) 和 \(a_j\) 移出该数组 和 x添加进数组。当数组长度为1时游戏结束。其中玛是尽可能让结果越大越好,而奥反之(双方都选择最优解,且玛先操作)。
  注意每次让数组的前k个数字加入游戏,问你每次的结果是多少。

2、题目解析

  由于是向下取整,所以当一个奇数和一个偶数相加则会损失1。所以玛优先合并两个奇数,而奥优先合并一奇一偶。并且不管选中奇数还是偶数,最终生成的x一定是偶数
  并且我们发现,当存在三个奇数时,一定会损失1。因为先是玛合并两个奇数获得偶数,那么奥就合并偶数和奇数少掉一个1。所以损失的个数就是3的倍数。如果多余1个奇数,那么还会损伤1(两个奇数则不会)。至于偶数,根本没有影响。

3、具体代码

#include<bits/stdc++.h>

using namespace std;

typedef long long ll;
const int N = 2e5+10;

int T;
int n;
int f[N];


void solve()
{
	cin >> n;
	ll sum = 0, odd = 0;
	for(int i = 1; i <= n; i++)
	{
		cin >> f[i];
		sum += f[i];
		if(f[i] & 1)	// 该数是奇数时
			odd++;
		if(i == 1)	// 可以特判
		{
			cout << f[1] << " ";
			continue;
		}
			
		// 每三个奇数,会少掉一个1
		// 因为先是玛合并两个奇数获得偶数,那么奥就合并偶数和奇数少掉一个1
		ll tmp = odd / 3;	
		
		if(odd % 3 == 1)	// 多出一个奇数那么肯定也会减一,两个就不会
			tmp++;
		cout << sum - tmp << " ";
	}
	cout << endl;

}

int main()
{
	cin >> T;
	while (T--)
	{
		solve();
	}

	return 0;
}

 

D、Mathematical Problem

跳转原题点击此:D题地址

1、题目大意

  给你一个数n,输出的n个数,其每个数要满足以下三个条件:

  1. 其长度为n
  2. 这n个数的数字组成个数必须保持一致。如123、213、312,都由1个1、2、3组成(数字可以重复)
  3. 这n个数必须是某个数的平方数,

2、题目解析

  打表题目,通过暴力查看后面的数,发现满足条件的里面一定有由1、9、6和若干个0组成。

3、具体代码

#include<bits/stdc++.h>

using namespace std;

#define _1 first
#define _2 second

typedef long long ll; 
typedef pair<ll, ll>pii;
const int N = 2e5+10;
const int M = 1010;
const int INF = 1e9 + 10;

int T;
int n;
int f[N];

void solve() {
    int n;
    cin >> n;
    if (n == 1) // 1特判
    {
        cout << "1\n";
        return ;
    }
    cout << "196";
    for (int i = n - 3; i; i --) 
    	cout << "0";
    cout << "\n";
 	// 查看规律
    for (int i = 1; i < n; i += 2) 
    {
        int cnt = 3;
       	cout << "9";
        for (int k = 1; k <= i / 2; k ++) 
        	cout << "0", cnt ++;
        cout << "6";
        for (int k = 1; k <= i / 2; k ++) 
        	cout << "0", cnt ++;
        cout << "1";
        for (int k = cnt; k < n; k ++) 
        	cout << "0";
        cout << "\n";
    }
 
    for (int i = 1; i < n; i += 2) 
    {
        int cnt = 3;
        cout << "1";
        for (int k = 1; k <= i / 2; k ++) 
        	cout << "0", cnt ++;
        cout << "6";
        for (int k = 1; k <= i / 2; k ++) 
        	cout << "0", cnt ++;
        cout << "9";
        for (int k = cnt; k < n; k ++)
        	cout << "0";
        cout << "\n";
    }
}

int main()
{
	cin >> T;
	while (T--)
	{
		solve();
	}

	return 0;
}

 

E、F、G、H1、H2(未来补题)

已经完全超出我的能力范围了。要我很久很久才能补上。呜呜呜emmm

标签:good,题目,奇数,int,codeforces,solve,2023,const,bye
From: https://www.cnblogs.com/Tom-catlll/p/17937938

相关文章

  • 2023 Goodbye!
    摆了一天,终于想起今天该跨年了(虽然那个时候我可能还在教室里),该写点什么。可是真的打开文档,却发现倏忽而过的2023好像并没有给我留下什么深刻的印象。那就浅浅地用最后三天的生活总结这一年吧。2023.12.31今天推掉了父母约出去和亲戚吃饭的事,一方面作业很多,另一方面一天的假期......
  • CF997E Good Subsegments
    对于这一类析合树问题有简单的线段树扫描线做法:考虑一个长为\(len\)的区间内一定有\(len-1\)个数值相邻的对,于是每次新加一个数\(a_i\)可以考虑相邻的两个数的出现位置\(p\),若\(p\lei\)就对\([1,p]\)区间加,表示左端点在\([1,p]\)的区间内多出一个相邻对接下来的问......
  • 初中英语优秀范文100篇-043Is Television Good or Bad?看电视是好是坏?
    PDF格式公众号回复关键字:SHCZFW043记忆树1Moreandmorepeoplelikewatchingtelevision.翻译越来越多的人喜欢看电视简化记忆电视句子结构1"Moreandmorepeople"是主语,表示越来越多的人。2"like"是谓语,表示喜欢或愿意。3"watchingtelevision"是宾语,表示......
  • Codeforces Round 918 (Div. 4) (前缀和,权值树状数组,二维偏序, python + golang)
    Dashboard-CodeforcesRound918(Div.4)-Codeforces  fromcollectionsimport*defsolve():a,b,c=list(map(int,input().split()))hs=defaultdict(int)hs[a]+=1hs[b]+=1hs[c]+=1foriinhs:ifhs[i]=......
  • [Codeforces] CF1545A AquaMoon and Strange Sort
    CF1545AAquaMoonandStrangeSort题目传送门题意有\(n\)个人从左到右站成一排,从左数第\(i\)个人的衣服上印着\(a_i\)。每个人的朝向可以是朝左、朝右。一开始所有人的方向都是朝右。您可以对这些人做一些“操作”,每次操作允许您找两个相邻的人让他们交换顺序,但是在操作......
  • [Codeforces] CF1547E Air Conditioners
    CF1547EAirConditioners题目传送门这道题我的思路严重劣于题解思路,所以请慎用但是自认为我的贪心比dp好理解点题意有\(q\)组数据,每组第一排表示有\(n\)个方格和\(k\)个空调,第二排是每个空调的位置\(a_i\),第三排是每个空调的温度\(t_i\)。每个空调对周围的影响......
  • codeforces刷题(1100):1862C_div3
    C、FlowerCityFence跳转原题点击此:该题地址1、题目大意  给你n块长度依次不递增的紧密连接在一起的垂直木板,将它们水平横过来,问其组成的全新n块木板的长度是否与原来的木板长度一致。  注意:这里的长度是指:木板的高度。水平摆放后的木板是左对齐,所以其长度就是各个木板水......
  • codeforces刷题(1100):1863B_div1+div2
    B、SplitSort跳转原题点击此:该题地址1、题目大意  给定一个长度为n的排列(该排列的数字是包含\(1\simn\),每个数必须出现一次)。你可以执行以下操作:  选中一个数x,比x小的数按照原来的顺序放在x的左边,大于等于x的数按照原来的顺序放在x的右边。问你将原始排列组成\(a_i==......
  • codeforces刷题(1100):1863C_div1+div2
    C、MEXRepetition跳转原题点击此:该题地址1、题目大意  给定一个数组,要求每次依次从左到右将\(a_i\)替换为当前数组的最小非负整数(每次替换一个数后,最小非负整数也会发生改变)。问你,经过k次的操作后,最终数组是什么。  注意:该数组的数和最小非负整数,是从\(0,1,\cdots,n\)......
  • Codeforces Round 918 (Div
    CodeforcesRound918(Div.4)这是本人打的第一把div4,比赛中AC到了E,算是打cf以来这一个多月的最成绩了,但是div4似乎只有EFG较难,ABC签到题,D是div3签到题。A.OddOneOut判断就行#include<bits/stdc++.h>usingnamespacestd;intmain(){intt;cin>>t;while......