zoukankan      html  css  js  c++  java
  • 【提高组】神奇的解法

    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
    ",res);
        return 0;
    }
    View Code

     P2320 [HNOI2006]鬼谷子的钱袋

    这道题我说我是用瞪眼法+乱猜法做出来的你信吗...给你一个数n要你输出一堆东西,看着就像递推,然而我想了想简单的递推好像没什么思路,那不会做的数学题就试试看二进制(反正写出来又不亏),发现n元钱要装它的二进制数的位数那么多个袋子;每个袋子要装多少呢,现在共有的钱-现在共有的钱/2,再更新现有的钱,用vector存,倒着输出就行。

    但还是要严谨证明下的..用分治,我们拿10举个例子,1是肯定要的;把10分成1~5和6~10,那么6~10可以用1~5加上5即可表示,那么5也要;同理把5也这么分下去。

    #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;
    vector<int>v;
    ll n;
    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(){
        n=read();
        while(n){
            ll tmp=n>>1;
            v.push_back(n-tmp);
            n=tmp;
        }
        printf("%lld
    ",v.size());
        Dfor(i,v.size()-1,0) printf("%lld ",v[i]);
        return 0;
    }
    View Code
  • 相关阅读:
    upload.go
    heartbeat.go
    delete.go
    get.go
    handler.go
    uuid.go
    kingpin_parser.go
    disk.go
    logrus_hook.go
    反连接NOT EXISTS子查询中有or 谓词连接条件SQL优化一例
  • 原文地址:https://www.cnblogs.com/jian-song/p/11805511.html
Copyright © 2011-2022 走看看