首页 > 其他分享 >1.9 构造

1.9 构造

时间:2023-01-09 22:46:26浏览次数:43  
标签:题意 int 1.9 构造 因数 solve cout

B. Find The Array

题意:给出序列a,S为a的所有元素之和。要求构造出一个序列b,使b中相邻元素为倍数关系,且b中元素与a中元素差值不能超过S/2.
思路:要求构造倍数关系,那么利用a元素的范围进行构造,构造出从1~\(2^{31}\),用二分选出与\(a_i\)相近的数字,由于每个构造出来的数字与原数字的差值不会超过它自己的一半,所以即使整个数组都改,也不会超过总和的一半。

int a[N];
 
//注意观察N的大小
void solve() {
	int n;
	cin >> n;
	for (int i = 1; i <= n; i ++) {
		int x;
		cin >> x;
		int pos = upper_bound(a, a + 31, x) - a;
		cout << a[pos - 1] << " \n"[i == n];
	}
}
 
int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	int t = 1;
	a[0] = 1;
	for (int i = 1; i <= 31; i ++) a[i] = 1 << i;
	
	cin >> t;
	while (t--) {
		solve();
	}
	
	return 0;
}

\[\]

C. Ping-pong

题意:Alice有x点体力,Bob有y点体力,每次击球消耗一点,问最后两人分别赢了多少场
思路:题目只是问最终会赢多少,没说要最小。所以答案就是x-1,y。每个人赢得自己体力的场次,Alice先击球,所以会被Bob抵消一个。

void solve() {
	int x, y;
	int resx, resy;
	cin >> x >> y;
	cout << x - 1 << ' ' << y <<  endl;
}

\[\]

B. Jumps

题意:起点为0,要到达坐标为x的点。每次跳跃可以跳i各单位或者后退一个单位。问最少需要多少次
思路:累加即可,直到和大于等于x,如果正好是x+1,则多走一步:向后退一个单位,否则在1~i次跳跃中,选择一次将其改为向后一格即可

void solve() {
	int x;
	cin >> x;
	int cnt = 0, sum = 0;
	for (int i = 1; i <= 1e6; i ++) {
		if (sum >= x) {
			if (sum - x == 1) cnt ++;
			break;
		}else sum += i, cnt ++;
	}
	
	cout << cnt << endl;
}

\[\]

D. Number into Sequence

题意:给出一个数字n,要求将n分解为若干因数,且是前面的因数都可以整除后面的的最长序列
思路:将n的所有因数各自的数量存在map中,然后找到具有最多数量的因数k,输出前k - 1个,然后将最后一个乘入剩余没用到的因数中

void solve() {
	LL n, x;
	cin >> n;
	x = n;
	map<LL, LL> mp;
	for (LL i = 2; i * i <= n; i ++) {
		while (n % i == 0) {
			mp[i] ++;
			n /= i;
		} 
	}
	
	LL maxv = -INF, tmp;
	
	for (auto i : mp) {
		if (i.second > maxv) {
			maxv = i.second;
			tmp = i.first;
		}
	}
	
	if (maxv < 0) {
		cout << 1 << endl;
		cout << n << endl;
		return ;
	}
	
	x /= pow(tmp, maxv);
	
	cout << maxv << endl;
	
	for (auto i : mp) {
		if (i.second == maxv) {
			for (int j = 1; j <= i.second - 1; j ++) {
				cout << i.first << " ";
			}
			cout << x * i.first << endl;
			break;
		}
	}
	
}

总结:对于构造题,首先要读懂题目意思,然后下手。其次还是得多练,感觉构造就是纯靠猜,需要多掌握几种变换方式,如需要相邻数具有倍数关系,则可以用2的幂次来构造

标签:题意,int,1.9,构造,因数,solve,cout
From: https://www.cnblogs.com/lbzbk/p/17038734.html

相关文章

  • 1.9寒假集训-进阶训练赛(五)A-M题解
    前五题网上都有不写了需要注意的是第四题是给定密钥和密文要把它加密算是一个逆过程看了半天都没读懂样例 第六题应该也有但是我写一下因为学校oj这边空间给的是1......
  • 2023.1.9周报
    本周总结:《算法竞赛》5.3、5.4,《算法竞赛进阶指南》0x56、0x5C、靠队友录屏白嫖了namomocamp的内容。大方向:动态规划小专题:数位DP、状压DP题目完成情况:div2、abc各......
  • 闲话 23.1.9
    闲话场上看T330min后得到了一个Trie分裂合并+手写平衡树优化珂朵莉树的巨大恶心做法感性证了一波复杂度是\(O(n\logn)\)的然后“如果正解真和这个sb做法......
  • 算法--2023.1.9
    1.力扣128-最长连续序列classSolution{publicintlongestConsecutive(int[]nums){//通过hashset保存去重复后的所有数据intn=nums.lengt......
  • 基于 Arcaea v4.1.9 ipa 制作的自制谱 | 壳子
    "一个很好的逆向入门的练习"首先需要准备IDAPro7.7以及Sideloadlyv0.28两个软件,前者能帮助你魔改ipa内容,后者能将ipa导入ios设备.Hash校验这是逆向......
  • Java的this关键字和构造方法与匿名对象
    this关键字的作用 1.表示类中的属性2.可以使用this调用本类的构造方法3.this表示当前对象 1.1this调用本类中的属性classPerson{privateStringname;//姓......
  • 2023.1.9 学习
    一、优势相比传统的机械传感器,MEMS具有着巨大的竞争优势:1.MEMS传感器具有着体积小、重量轻、功耗低的特点。其内部结构可达微米甚至纳米量级。同时其内部的机械部件由于......
  • 构造器
      构造器:1.和类名相同(必须)2.没有返回值 作用使用new关键字,本质是在调用构造器。用来初始化有参数构造:一旦定义了有参构造,无参就必须显示定义快捷键alt+inser......
  • 使用Es6提供的构造函数Proxy实现数据绑定
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><title>Document</......
  • Codeforces - 1656E - Equal Tree Sums(构造 + 树论 + 图论 + 搜索、结论题、*2200)
    1656E-EqualTreeSums(⇔源地址)目录1656E-EqualTreeSums(⇔源地址)tag题意思路AC代码错误次数:0tag⇔*2200、⇔构造、⇔树论、⇔图论、⇔搜......