UVA 12166 Equilibrium Mobile
2016-02-24 22:50
381 查看
题目链接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=24&page=show_problem&problem=3318
题意:给出一个天平的信息,天平可嵌套。问至少修改多少个点的权值可以使得这个天平达到平衡。
思路:参考了别人的想法,一个很重要的信息,假设一个点在不发生改变的情况下(通过修改其他的点)使得天平达到平衡,那么是可以得到这个天平的总重量的。由天平的平衡性,现在假设一个点的深度是p(根节点深度为0),权值为w,那么整个天平的重量就是w * 2^p。我们可以通过单独考虑每个点如果不改变的话天平的总重量是多少,然后在这个总重量情况下的点数就加1,表示当天平的总重量是这种情况下,有多少个点可以不用修改。
剩下需要做的就是递归去处理这个表达式。考虑表达式有两种形式:
(1)嵌套,以'['开头。那么就递归处理左边,递归处理右边。
(2)数字开头,读完这个数字,结束。
所以递归函数可以写成将左边开头下标传进去,返回右边结束下标。具体细节可以参考代码。
附参考链接:/article/2636309.html
题意:给出一个天平的信息,天平可嵌套。问至少修改多少个点的权值可以使得这个天平达到平衡。
思路:参考了别人的想法,一个很重要的信息,假设一个点在不发生改变的情况下(通过修改其他的点)使得天平达到平衡,那么是可以得到这个天平的总重量的。由天平的平衡性,现在假设一个点的深度是p(根节点深度为0),权值为w,那么整个天平的重量就是w * 2^p。我们可以通过单独考虑每个点如果不改变的话天平的总重量是多少,然后在这个总重量情况下的点数就加1,表示当天平的总重量是这种情况下,有多少个点可以不用修改。
剩下需要做的就是递归去处理这个表达式。考虑表达式有两种形式:
(1)嵌套,以'['开头。那么就递归处理左边,递归处理右边。
(2)数字开头,读完这个数字,结束。
所以递归函数可以写成将左边开头下标传进去,返回右边结束下标。具体细节可以参考代码。
附参考链接:/article/2636309.html
#include <cstdio> #include <cmath> #include <cstring> #include <string> #include <cstdlib> #include <iostream> #include <algorithm> #include <stack> #include <map> #include <set> #include <vector> #include <sstream> #include <queue> #include <utility> using namespace std; #define rep(i,j,k) for (int i=j;i<=k;i++) #define Rrep(i,j,k) for (int i=j;i>=k;i--) #define Clean(x,y) memset(x,y,sizeof(x)) #define LL long long #define ULL unsigned long long #define inf 0x7fffffff #define mod %100000007 #define mp make_pair #define fi first #define se second #define lson l,m,rt<<1 #define rson m+1,r,rt<<1|1 #define mid int m=(l+r)>>1 int T; int tot; char str[1000009]; map<LL,int> w; int dfs(int st,int deep) { if ( str[st] == '[' ) { int k = dfs(st+1,deep+1);//递归左部分,k是左部分的结束下标。 return dfs(k+2,deep+1)+1;//k+2是右部分的开始下标,返回右部分结束下标加1( 考虑] ) } else { LL ans = 0; while(isdigit(str[st])) { ans = ans * 10 + str[st] - '0'; st++; } w[ans<<deep]++; tot++; return st-1; } } int main() { cin>>T; getchar(); while(T--) { tot = 0; gets(str); w.clear(); dfs(0,0); int ans = 1; for(map<LL,int>::iterator it = w.begin(); it != w.end(); it++) ans = max( ans , it->second ); printf("%d\n",tot-ans); } return 0; }
相关文章推荐
- 最新 Sublime Text3 激活码 (Build 3103 有效)
- ui进阶第五天,绘图的基本介绍
- Queue Java
- response.setContentType与 request.setCharacterEncoding 区别
- Foundation框架下的常用类(NSNumber, NSValue, NSDate,NSDateFormatter)
- leetcode ---Unique Paths
- UEditor 报错:Uncaught ReferenceError: UE is not defined; Uncaught ReferenceError: UM is not defined
- ios-UI控件精讲之【6】-UIImageView
- ios-UI控件精讲之【5】-UIImage
- 通过Gradle来取的Jenkins的build
- UI美化概述
- suid seuid 当前用户ID 有效用户ID
- 5.UINavigationController
- web.xml is missing and <failOnMissingWebXml> is set to true
- iOS-UI-基本控件之UISwitch
- UICollectionView 使用 介绍
- String,StringBuffer,StringBuilder三者区别
- deque向量
- UITextField知多少
- 持续集成(CI)-build, test, and deploy & 自动化编译系统 mark & learn