P1007 独木桥

两个人迎面相遇后再调头走,其实等同于两个人穿过对方继续向前走(想象一下在足够高的高空向下看,人是没任何区别的)。

假设人在坐标点p,那么向左走出要走p秒,向右l-p+1秒。那么maxans=max(maxans,max(l-p+1,p)); minans=min(minans,min(l-p+1,p));

#include<bits/stdc++.h>
#define ri register int
#define ll long long
#define For(i,l,r) for(ri i=l;i<=r;i++)
#define Dfor(i,r,l) for(ri i=r;i>=l;i--)
using namespace std;
int n,l,p,maxv,minv;
inline ll read(){
    ll f=1,sum=0;
    char ch=getchar();
    while(!isdigit(ch)){if(ch=='-')f=-1;ch=getchar();}
    while(isdigit(ch)){sum=(sum<<1)+(sum<<3)+(ch^48);ch=getchar();}
    return f*sum;
}
int main(){
    l=read(),n=read();
    For(i,1,n){
        p=read();
        maxv=max(maxv,max(l-p+1,p));
        minv=max(minv,min(l-p+1,p));
    }
    printf("%d %d",minv,maxv);
    return 0;
}
View Code

P1984 [SDOI2008]烧水问题

递推+找规律(数学?)。我还被找规律卡了一会儿,数学好差。找规律大法好!

唯一要注意的就是精度在运算和输入输出时的处理

#include<bits/stdc++.h>
int n;
double res,now;
using namespace std;
int main(){
    cin>>n;now=420000.00/n;
    for(int i=1;i<=n;i++){
        res+=now;
        now=((double)(2*i-1)/(double)(2*i))*now;
    }
    printf("%.2lf\n",res);
    return 0;
}
View Code
01-16 17:41