B. Buttons
Posted -ackerman
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了B. Buttons相关的知识,希望对你有一定的参考价值。
题目链接:http://codeforces.com/problemset/problem/268/B
大概的意思就是说有n个按钮,但是这n个按钮有唯一的正确的组成,看你最坏的情况找到这唯一的组成需要几次。
这题目是一个找规律的题目,但是一开始自己认为这个规律是递归的,所以一直没有找到一个正确的公式
然后看了一下别人的博客,才开始有点理解应该如何去思考这个题目
思路:
首先我们假设是第i轮,第i轮是为了找到第i个正确的按键。第i轮我们之前已经按下了i-1个按键,还剩下n-(i-1) = n - i + 1个按键需要去按
先看样例:
如果是2个按键
第一轮: 我们需要多按1次才可以找到
第二轮:我们需要多按0次就可以找到
如果是3个按键
第一轮:我们需要多按2次才可以找到
第二轮:我们需要多按2次才可以找到
注意这里我说的是多按,就是正确的那一次我们不算入里面
理论上来看:
剩下n-i+1个按键,把上次按错按钮导致的重置步数加到确认下一个按钮的步数中,直到我们找到正确的按钮,这时需要按 (n-i)*i次。
所以,第i轮总共需要按 1+(n-i)*i次按钮。
AC代码:
#include <cstdio> #include <string> #include <iostream> #include <algorithm> #include <cstdbool> #include <string.h> #include <math.h> using namespace std; int main() int n; cin >> n; int sum = 0; for (int i=1;i<=n;i++) sum += ((n-i)*i + 1); printf("%d\n",sum); return 0;
以上是关于B. Buttons的主要内容,如果未能解决你的问题,请参考以下文章