校赛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;
}