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