__________________________________
Ad Hoc类问题的方法:
(1)机理分析法。分析题目描述,推出算法。
(2)统计分析法。追寻最终的数学模型。
Problem 1:
起始的奇迹之年是1960年。
第n年的位数k=2^(2+(y-1960)/10),能放在k位中最大的无符号整数是(2^k)-1, 那么我们就引入了对数的运算:
--------------https://vjudge.net/contest/317081#problem/A
code:
#include<stdio.h>
#include<math.h>
int main()
{
int year;
int endflag;
int n;
double sum;
while(scanf("%d",&year),year)
{
endflag=1<<((year-1960)/10+2);// 1<<a==pow(2,a)
n=2;
sum=0;
while(sum<=endflag)
{
sum+=log(n)/log(2);//log2(n)!
n++;
}
printf("%d\n",n-2);
}
return 0;
}
Problem 2:
https://vjudge.net/contest/317081#problem/C
#include<iostream>
#include<cstdio>
using namespace std;
int t,d,m,n,min_,max_;
int main()
{
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&m,&n);
min_=max_=0;//双双赋值!
while(n--)
{
scanf("%d",&d);
min_=max(min_,min(d,m-d));
max_=max(max_,max(d,m-d));
}
printf("%d %d\n",min_,max_);
}
return 0;
}