Ad Hoc类问题

__________________________________

 

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

  

 

posted @ 2019-08-04 16:02  龙龙666666  阅读(282)  评论(0编辑  收藏  举报