Codeforces Round #370 (Div. 2) C. Memory and De-Evolution(逆向思维)
来源:互联网 发布:java分层命名规范 编辑:程序博客网 时间:2024/06/05 03:22
题目链接
http://codeforces.com/contest/388/problem/B
题目大意
给你初始等边三角形的边长a以及目标边长b
问你把边长为a的等边三角形变为边长为b的等边三角形最少需要几步
一步可以改变三角形一边的大小, 但要保证变化后还是一个三角形
思路
题目保证b < a, 也就是要把初始三角形变小,
博主一开始的做法是贪心, 每次都把最大的边变得尽可能小,然而后来发现这是有bug的, 假设三角形三边从小到大为x, y, z,按照刚刚的做法我们应该把z变为y - x + 1, 从这个式子我们发现, 每次能把z变得多小是由x决定的, 你把最长边变得过小之后, 下次变化就很有限了, 因此这样的贪心是错的
我们从反面思考, 把一个边长为b的等边三角形变为边长为a的等边三角形, 这样每次变化我们把最小边变得尽可能大,还是x, y, z, 这时我们把x变为y + z - 1, 这样就不存在第一种做法的问题了
代码
#include<bits/stdc++.h>using namespace std;int a, b, ans = 0;bool flag;void dfs(int x, int y, int z){ if(x == z && x == b)return ; int t[3]; t[0] = x, t[1] = y, t[2] = z; if(t[0] + t[1] - 1 >= b) t[2] = b; else t[2] = t[0] + t[1] - 1; ++ans; sort(t, t+3); dfs(t[2], t[1], t[0]);}int main(){ scanf("%d%d", &a, &b); if(a < b)flag = true; else flag = false; if(!flag)swap(a, b); dfs(a, a, a); printf("%d\n", ans); return 0;}
反思
一开始没看到b < a, 然后很自然地就分为两种情况讨论, 然后就没想到反过来做QAQ
阅读全文
0 0
- Codeforces Round #370 (Div. 2) C. Memory and De-Evolution(逆向思维)
- Codeforces Round #370 (Div. 2) C. Memory and De-Evolution【逆向思维+贪心】
- Codeforces Round #370 (Div. 2) C. Memory and De-Evolution【逆向思维+贪心】
- Codeforces Round #370 (Div. 2)C. Memory and De-Evolution(数学,思维))
- codeforces 370div.2 C Memory and De-Evolution[逆向思维]【思维】
- Codeforces Round #370 (Div. 2)-C. Memory and De-Evolution
- Codeforces Round #370 (Div. 2) C. Memory and De-Evolution
- CodeForces 712C - Memory and De-Evolution 逆向思维
- 【Codeforces Round 370 (Div 2) C】【正难则反 贪心】Memory and De-Evolution
- Codeforces Round #370 (Div. 2) C. Memory and De-Evolution【dfs+想法】
- codeforces C. Memory and De-Evolution
- Codeforces-712C-Memory and De-Evolution
- Codeforces 712C Memory and De-Evolution
- CodeForces 712 C. Memory and De-Evolution(贪心)
- codeforces 712C C. Memory and De-Evolution(贪心)
- 【Codeforces 712 C. Memory and De-Evolution】+ 贪心
- CodeForces 712C Memory and De-Evolution(逆推,新思路)
- codeforces 712-C. Memory and De-Evolution(数学+逆推)
- 求树的最大独立集
- 知识点14:数组内存储1-100的不重复随机数问题
- json串的使用与操作
- Java内存的一点理解, 静态方法和实例方法的区别及使用场景
- Linux
- Codeforces Round #370 (Div. 2) C. Memory and De-Evolution(逆向思维)
- selenium+python自动化测试(四)--鼠标和键盘事件
- irqbalance对台式机/笔记本是否有帮助?
- 算法(一)最大子数组问题
- JS学习路线
- 实时更新UI
- 通俗理解卷积神经网络
- Java方法重载
- C中常用的字符、字符串处理函数