acm公式推导类题总结

校赛E.log

思路

已知 2^log2(x) = x,题意为x^2后/2再^2,转换为  2^log2(x) 在一系列变化后与 2^n 作比较,即 log2(x) 同 n 比较。

分类讨论

1. log2(x) >= n ,直接输出0

2. log2(x) <= 1 且 y>2,则无论如何都不满足,输出inf

3.一般情况下,都是将 log2(x)*2 与 y 作比较

难点

1.c++ log函数表示计算,log2(x)即log(x)/log(2)

2.while(n>k)循环里的顺序变了会导致超时

ac代码
#include <bits/stdc++.h>
using namespace std;
int t=0;
int main()
{
    int x,n;
	scanf("%d%d", &x, &n);
	double k=log(x)/log(2);
	int count=0;
    if(k<=1 && n>2) {
        printf("inf");
        return 0;
    }
    
	while(k<n){
        if(count==0) k*=2.0;
		else k=(k-1.0)*2.0;
        
        count++;
	}
	
	printf("%d", count);
	return 0;
}


校赛G.兔子大王

注意本题面有误,j=i+1 而不是 1

样例:

输入   3    10   100

输出   2     24   2739

思路:

根据题面,可知 g 函数与 f 的奇偶性有关,而观察斐波那契可发现,是由奇,奇,偶的循环构成。

根据 i 分两种 :

1. i%3 != 0

则g( 奇数 * f( j ) ),根据 j %3是否为0,若 j 是3倍数,为1。若不是,为0

2. i%3==0

g(偶数 * f( j ) ) ,统计 n-j+1

具体如图

ac代码

(以后会补充详细做法哒~)

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll x,n,ans;
int main()
{
    ll n;
    cin>>n;
    ll m=n/3;
    ll res =((m-1)*2+n%3+1)*m+m*n;
    cout<<res/2;
    return 0;
}

  • 21
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值