摘要: 暴力训练的题目,给出一个数字(最长1000位即10^1000),给出m表示交换次数(每次可以交换任意两位的数字),问交换后得到的最小数字。注意,数字不能有前导0,另外有m次交换机会,但不必全部用完,只要交换到最小数字了就可以退出为了得到最小数字,就是从高位开始,不断找最小的数字放到高位(但第一位要特殊处理不能为0)。如果现在使第i位最小,从第i到最后一位扫描找到最小值然后交换然后交换次数减1,如果刚好第i位就是最小值,则不交换,直接跳过,所以交换次数不能减1。如果m>len,即大于数字的位数,那么显然后面的交换机会都是多余的,最多交换len次就可以退出了所以结束枚举的条件是,以为枚举了全 阅读全文
posted @ 2013-04-19 13:19 Titanium 阅读(390) 评论(0) 推荐(0) 编辑
摘要: 计算几何训练的题目,给出n个点的坐标(整数),选3个点组成三角形问能形成多少个锐角三角形直接暴力解决,用三个for循环枚举3个点(升序枚举避免重复),然后用余弦判断三角形中三个角是否为锐角判断一个角为锐角:已知j,i,k三个点形成一个角,以i为交点向j,k做两个向量a,b,用余弦定理cos = a*b/( |a| * |b| ) ,因为|a|*|b|必为正整数而且我们不是要算确切的角度只是判断锐,直,钝角所以直接用 a*ba*b=0 , 直角a*b>0 , 锐角或0度a*b<0,钝角或180度所以不用单纯靠 a*b 的正负来判断是什么叫,对于a*b>0的情况还要判断是否为0度 阅读全文
posted @ 2013-04-19 12:51 Titanium 阅读(259) 评论(0) 推荐(0) 编辑