CodeForces 471C MUH and House of Cards
2015-10-28 11:17
190 查看
看主题Hint 图形会知道的题意。针对图形,你会发现一个稍微留意一下,的卡的数量的每一层需要 2 * n + (n - 1)个月,然后,一般有一个思路,暴力枚举,但是,这不能仅仅帮助枚举。这个公式 表示一个,枚举吧,能够化简一下 公式就是 3 * n - 1。这样就会发现 每次差1就是3的倍数了,然后每一层都差1,如果有i层的话。那么事实上就是差了i,这样就非常easy想到了。如果共同拥有卡牌 x张,事实上 就是枚举 i ,有多少个i 使得
(x + i)%3 == 0,这样就简单了。可是还有个限制的。由于 搭建i层 至少须要的牌数要知道。布恩那个超过x张。这里又得多画画找找,后来发现 搭建i层 至少须要 (3 * i + 1)* i/2张卡牌,这样 就非常easy确定枚举范围了,并且 答案不大,所以直接枚举答案没事
题目链接:戳这里
做完认为有点取巧,万一答案非常大不就完了,于是乎去看看别人怎么做的,发现了更好的方法,事实上 每一层 差1 就是3的倍数,那么相当于,每一层减去2就是3的倍数,这样就不是 枚举 (x + i)%3 == 0了,能够往下 枚举 (x - 3 * (j - 1) - 2 * j)%3 == 0;这样就不用考虑上限了。降低了找公式的时间
(x + i)%3 == 0,这样就简单了。可是还有个限制的。由于 搭建i层 至少须要的牌数要知道。布恩那个超过x张。这里又得多画画找找,后来发现 搭建i层 至少须要 (3 * i + 1)* i/2张卡牌,这样 就非常easy确定枚举范围了,并且 答案不大,所以直接枚举答案没事
题目链接:戳这里
做完认为有点取巧,万一答案非常大不就完了,于是乎去看看别人怎么做的,发现了更好的方法,事实上 每一层 差1 就是3的倍数,那么相当于,每一层减去2就是3的倍数,这样就不是 枚举 (x + i)%3 == 0了,能够往下 枚举 (x - 3 * (j - 1) - 2 * j)%3 == 0;这样就不用考虑上限了。降低了找公式的时间
ll n; void init() { } bool input() { while(cin>>n) { return false; } return true; } void cal() { ll ans = 0ll; for(ll k = 1;;k++) { if(n < (3 * k + 1) * k / 2) break; if((n + k)%3 == 0)ans++; } cout<<ans<<endl; } void output() { } int main() { while(true) { init(); if(input())return 0; cal(); output(); } return 0; }
相关文章推荐
- 《开源框架那点事儿18》:为什么从开始的第一个测试写入和文档?
- 贝叶斯公式与全概率公式
- 算法应用商店—Algorithmia
- jsp导出Excel功能的实现
- android Fragments详解六:处理fragement的生命周期
- Windows Server 2012 R2 安装报错解决方案
- 常见设计模式快速记忆
- 151多线程(优先级&yield方法)
- 类的声明
- Android中的时间自动更新
- iOS键盘遮挡文本框的解决方案
- Strings
- Linux解压缩zip,tar,tar.gz,tar.bz2
- C/C++ SQLite 之基础篇
- Leetcode -- LRU Cache
- Codeforces Round #253 DIV1 C 馋
- xUtils框架的使用
- Google Chrome调试常用快捷键
- Malformed OGNL expression: 6578706f7274 [ognl.ParseException: Encountered " <INT_LITERAL> "7274 "" a
- 协同过滤算法-slope one