• 2013.2.A&&3.A


    半期考之后,磨磨蹭蹭的刷了两套长乐的模拟题【=-=我现在实在是不敢恭维自己的刷题速度】
    感觉貌似很久没有来这里喂食了,就顺便yy下题解好了

    2013.2.A:
    ice :BFS和spfa都可以,我打了个spfa顺便复习了一【ps:不懂自己在想什么,用cena的时候配置配错了,无限wa啊,=-=之后测了一下标程,不明觉厉】

    promotion: DP 感觉自己DP一直都不太会【或许是因为没有很系统的学习】 然后大概想了一下F[I][J]要填什么 大概yy出来之后 貌似调得蛮久的

    book :这是之前我在学二分算法的时候打的一题 记得当时模拟写挂了【差点哭瞎】

    2013.3.A

    country :纯模拟,没有什么好说的【当时自己忘记判在同一个圆的情况,=-=WA的特忧伤】

    dec:二分答案+排序【还有这里需要预处理一下把相同的数放在同一集合里】【排序完之后二分找到a+c=b的就可以了】

    couple number: 看得第一眼以为是有点厉害的数论 之后发现就是奇数和4的倍数嘛【不到15行=-=整个人都不好了】

    3.A的题略水一些

    扔上题目和代码=-=
    题1 冰岛
    【问题描述】
    假设你在一个n*n的冰面上,并且你想到达这个冰面的某处,可是由于冰面太滑了,所以当你向某个方向出发后,你没有办法使自己停下来直到你碰到了某个障碍物——因为你可以抓住障碍物使得你的身体停止运动。
    因为你已经知道了整个地图,所以你决定在行动之前先计算出最快可到达目标的路线,使得你可以不用走太多冤枉路,这时你决定编程解决这个问题……
    【输入格式】
    第一行包括一个正整数n(n<=1000)
    以下n行,每行包括n个数字(0或1),0表示该点为空地可以滑行,1表示该点为障碍物(障碍物无法穿过)。保证最外圈的地形为障碍物,也就是你无法离开这个地图。
    接下来1行包括2个整数x,y(1<=x,y<=n),表示一开始你处于坐标(x,y)
    再接下来1行包括2个整数x2,y2(1<=x2,y2<=n),表示你想要到达的目标为(x2,y2)
    【输出格式】
    只有一个整数t,表示能到达目标的最短时间(假设每经过一次滑行需要花费1单位的时间,无论这次滑行距离的长短)。所谓到达目标要求必须停留在(x2,y2),也就是你不能在到达之后被迫滑向下一个点。当你无法到达目标点时,你只须输出一行字符串’impossible’。
    【输入样例1】
    1 1 1 1 1
    0 0 1 1
    0 0 0 1
    0 0 0 1
    1 1 1 1
    2
    3
    【输出样例1】
    说明:由(2,2)到(2,3),再由(2,3)到(4,3),2次滑行到达终点。
    【输入样例2】
    1 1 1 1
    0 1 1
    1 0 1
    1 1 1
    2
    3
    【输出样例2】
    impossible
    【数据范围】
    20%数据满足 n<=5
    40%数据满足 n<=10
    60%数据满足 n<=200
        100%数据满足 n<=1000
    
    
    题2  保送
    【题目背景】
    yk同学赫赫有名,为什么呢?因为他参加了若干竞赛,所以认识无数大朋友和小盆友。可是无数大朋友和小盆友也都认识他,为什么呢?因为yk同学实在是太牛了~ 我们甚至经常可以在路上听到同学之间的典型谈话:
    小A:你认识yk吗?
    小B:当然认识啦,就是那个XX竞赛班的大牛哇~
    小A:他不光是XX竞赛班的神牛,还是XXX竞赛班的神牛呢~
    小B:哦~~ 
    然后小A小B一起无限膜拜中……
    那么,yk同学到底神到什么地步呢?
    世界上总共有N门竞赛,yk同学参加了全部,并且都能拿到保送!!运气好的时候呢,还能拿到一等奖!!怎么样,厉害吧~~ 
    【题目描述】
    现在有N门竞赛,yk同学对于不同学科有不同的概率拿到一等奖。现在yk想知道,他有多少的概率至少拿到M个一等奖。
    【输入格式】promotion.in
    第一行两个用空格隔开的正整数N,M
    下面N行,每行一个0~1的实数,第i+1行的实数表示第i门科目得到一等奖的概率。
    【输出格式】promotion.out
    一行一个实数,表示至少得到M门一等奖的概率。实数保留六位小数。
    【输入样例1】promotion.in
    1
    1
    【输出样例1】
    1.000000
    【输入样例2】
    1
    0.046921
    0.959868
    0.008229
    【输出样例2】
        0.962066
    【数据范围】
    100% M<=N<=20
    
    
    题3 任务分配
    【问题描述】
    图书馆按顺序排列有N本书需要维护,每本书的总页数不相同。现有M位员工。可以给每个员工分配连续的一段书籍,让他进行维护。现在的问题是,怎么样分配,工作任务最重(需要维护的页数最多)的人维护的页数尽量少。 
    
    【输入格式】
    第一行两个数,N、M。接下来N行,每行一个整数,表示一本书的页数。
    
    【输出格式】
    任务最重的人最少需要维护的页数。
    
    【输入样例】
    3
    2
    1
    
    【输出样例】
    
    【数据范围】
    20%数据:N<=1000
    30%数据:N<=10000
    100%数据::N<=100000,M<=N。一本书的页数最多10000。
    
    
    题1  圆国旅行
    【问题描述】
       圆国是一个国家,它包含几个圆形地区。有些地区可能位于内其他地区,但其边界不相交或触摸。 Qatam是圆国的乡村居民。当他在两个地点之间旅行,他总是试图跨越过尽可能少的边界地区,因为跨越地区边界通常是费力的任务。
    【输入】
        输入文件名为country.in。有多组测试数据:
        第一行,包含一个整数Num,表示测试数据的个数。(1<=Num<=10)
        每组测试数据,第一行一个整数N,表示共有N个地区。1<=N<=50. 
        接下来三行,每行N个整数,前两行分别表示每个地区的x坐标和y坐标[-1000,1000],第三行表示该地区圆的半径r[1,1000]。
        最后4个整数,分别表示Qatam的起点和目标点x1,y1,x2,y2[-1000,1000]。
    【输出】
       输出文件country.out共Num行,最少穿过的边界数目。
    【输出输出样例】
    country.in    country.out
     
    0
    2
    -5 1 5 1
    0 -6 6
    1 2
    2 2
    -5 1 5 1
    1 -3 2 5 -4 12 12
    -1 2 5 5 1 1
    1 2 1 1 1 2
    -5 1 12 1
    -3 2 2 0 -4 12 12 12
    -1 2 3 1 5 1 1 1 
    3 1 7 1 1 2 3
    3 13 2
    -107 -38 140 148 -198 172 -179 148 176 153 -56 -187
    -115 23 -2 -49 -151 -52 42 0 68 109 -174
    42 70 39 89 39 43 150 10 120 16 8
    16 19 -108    0
    3
    3
    
    题2  A-B
    【问题描述】
        出题是一件痛苦的事情!
        题目看多了也有审美疲劳,于是我舍弃了大家所熟悉的A+B Problem,改用A-B了哈哈!
        好吧,题目是这样的:给出一串数以及一个数字C,要求计算出所有A-B=C的数对的个数。(不同位置的数字一样的数对算不同的数对)
    【输入格式】
        第一行包括2个非负整数N和C,中间用空格隔开。
        第二行有N个整数,中间用空格隔开,作为要求处理的那串数。
    【输出格式】
        输出一行,表示该串数中包含的所有满足A-B=C的数对的个数。
    【输入输出样例】
    dec.in    dec.out
    1
    1 2 3    3
    【数据规模】
        对于90%的数据,N <= 2000;
        对于100%的数据,N <= 200000。
        所有输入数据都在longint范围内。
    
    题3   Couple Number
    【问题描述】
        任何一个整数N都能表示成另外两个整数a和b的平方差吗?如果能,那么这个数N就叫做Couple number。你的工作就是判断一个数N是不是Couple number。
    【输入格式】
        仅一行,两个长整型范围内的整数n1和n2,之间用1个空格隔开。
    【输出格式】
        输出在n1到n2范围内有多少个Couple number。
        注意:包括n1和n2两个数,且n1<n2,n2 - n1 <= 10 000 000。
    【输入样例】
    10
    【输出样例】
    7
    
    
    

      ice:

    #include<cstdio>
    #include<cstring>
    using namespace std;
    int dx[4]={0,0,1,-1},dy[4]={1,-1,0,0};
    long long vis[1010][1010],d[2000001][3],n,h=1,w=1;
    bool s[1010][1010];
    void SPFA(int x,int y,int xx,int yy){
        int t,l;
        d[1][0]=x;d[1][1]=y;
        vis[x][y]=0;
        while(h<=w){
          for(int i=0;i<4;i++){
              t=d[h][0]+dx[i];
              l=d[h][1]+dy[i];
              if(s[t][l]) continue;
              while(!s[t+dx[i]][l+dy[i]]){
                 t+=dx[i];
                 l+=dy[i];
              }
              if(x==t && y==l) continue;
              if(vis[t][l]!=0) continue;
              vis[t][l]=vis[d[h][0]][d[h][1]]+1;
              w++;
              d[w][0]=t;d[w][1]=l;
              if(t==xx && l==yy) return;
          }
          h++;
        }
    }
    int main()
    {    
        int x,y,xx,yy;
        freopen("ice.in","r",stdin);freopen("ice.out","w",stdout);
    
        memset(d,0,sizeof(d));
        memset(vis,0,sizeof(vis));
        scanf("%d",&n);
        for (int i=1;i<=n;i++)
            for (int j=1;j<=n;j++){ 
                  scanf("%d",&x);
                  s[i][j]=x;
               }
        scanf("%d%d",&x,&y);
        scanf("%d%d",&xx,&yy);
        SPFA(x,y,xx,yy);
        if(vis[xx][yy]!=0) printf("%d
    ",vis[xx][yy]);
          else {
               if(x==xx && y==yy) printf("0
    ");
                  else printf("impossible
    ");
               }
        return 0;
    }
    

      

        promotion:

    #include<cstdio>
    #include<cstring>
    #include<iostream>
    using namespace std;
    double f[30][30],a[30],ans=0;
    int n,m;
    int main(){
        freopen("promotion.in","r",stdin);freopen("promotion.out","w",stdout);
        scanf("%d%d",&n,&m);
        memset(a,0,sizeof(a));
        for(int i=1;i<=n;i++){
            cin>>a[i];
        }
        f[0][0]=1;
        for (int i=1;i<=n;i++)
        {
          f[i][0]=f[i-1][0]*(1-a[i]);
          for (int j=1;j<=i;j++)
            f[i][j]=f[i-1][j]*(1-a[i])+f[i-1][j-1]*a[i];
        }
        for (int i=m;i<=n;i++) ans+=f[n][i];
        printf("%.6lf",ans);
    
        return 0;
    }
    
    

      book:

    #include<cstdio>
    #include<cstring>
    using namespace std;
    int a[100001],n,m;
    bool check(int x){
    int now=x,num=0;
        for (int i=0;i<n;i++){
          if (x<a[i]) return false;
          if (now-a[i]<0){
            now=x;
            num++;
            now-=a[i];
            if (num==m) return false;
          }
          else
            now-=a[i];
        }
        return true;
    }
    int main(){
        int i,j,s,t,tot=0;
        //freopen("book.in","r",stdin);freopen("book.out","w",stdout);
        
        scanf("%d%d",&n,&m);
        for (i=0;i<n;i++){
            scanf("%d",&a[i]);
            tot+=a[i];
        }
        int r=tot,l=0;
        while (l<=r){
            int mid=(l+r)>>1;
            if(check(mid)) r=mid-1;
                      else l=mid+1;
        }
        printf("%d",l);
        return 0;
    }
    

      country:

    #include<cstdio>
    #include<cstring>
    using namespace std;
    int n,m,x[501],y[501],r[501],print[501],fx,fy,ex,ey,min,t;
    void check(int x,int y,int r,int a,int b){
        if((x-a)*(x-a)+(y-b)*(y-b)<r*r){
            min++;++t;
        }
    }
    int main(){
        freopen("country.in","r",stdin);freopen("country.out","w",stdout);
        scanf("%d",&n);
        for(int i=0;i<n;i++){
            min=0;
            memset(x,0,sizeof(x));
            memset(y,0,sizeof(y));
            memset(r,0,sizeof(r));
            scanf("%d",&m);
               for(int j=0;j<m;j++)  scanf("%d",&x[j]);
               for(int j=0;j<m;j++)  scanf("%d",&y[j]);
               for(int j=0;j<m;j++)  scanf("%d",&r[j]);
            scanf("%d%d%d%d",&fx,&fy,&ex,&ey);
            for(int k=0;k<m;k++){
                t=0;
                check(x[k],y[k],r[k],fx,fy);
                check(x[k],y[k],r[k],ex,ey);
                if(t==2) min-=2;
            }
            print[i]=min;
        }
        for(int i=0;i<n;i++) printf("%d
    ",print[i]);
        return 0;
    }
    

      dec:

    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    const int MAXN=2000001;
    long long  a[MAXN],num[MAXN],n,ans=0,c,l,r,mid;
    int main(){
        freopen("dec.in","r",stdin);
        freopen("dec.out","w",stdout);
        scanf("%d%d",&n,&c);
        memset(num,0,sizeof(num));
        for(int i=0;i<n;i++){
            scanf("%d",&a[i]);
            num[a[i]]++;
        }
        sort(a,a+n);
        for(int i=1;i<n;i++){
            l=1;r=i-1;
            while(l<=r){
                mid=(l+r)>>1;
                if(a[i]-a[mid]>c) l=mid+1;
                  else{
                    if(a[i]-a[mid]<c) r=mid-1;
                      else{
                             ans=ans+num[a[mid]]; 
                 break;
        }}}}
        
        printf("%d",ans);
        return 0;
    }
    

      couple

    #include<cstdio>
    #include<cstring>
    #include<cmath>
    using namespace std;
    long long n,m,ans=0;
    int main(){
        freopen("couple.in","r",stdin);
        freopen("couple.out","w",stdout);
        scanf("%d%d",&n,&m);
        for(int i=n;i<=m;i++){
            if(i%4==0 || i%2!=0) ans++;
        }
        printf("%d",ans);
        return 0;
    }
    

      

     
  • 相关阅读:
    bzoj 2442: [Usaco2011 Open]修剪草坪【单调栈】
    bzoj 1579: [Usaco2009 Feb]Revamping Trails 道路升级【分层图+spfa】
    bzoj 1646: [Usaco2007 Open]Catch That Cow 抓住那只牛【bfs】
    bzoj 1677: [Usaco2005 Jan]Sumsets 求和【dp】
    bzoj 1657: [Usaco2006 Mar]Mooo 奶牛的歌声【单调栈】
    洛谷 P4180 【模板】严格次小生成树[BJWC2010]【次小生成树】
    bzoj 1660: [Usaco2006 Nov]Bad Hair Day 乱发节【单调栈】
    bzoj 1726: [Usaco2006 Nov]Roadblocks第二短路【dijskstra】
    bzoj 1631: [Usaco2007 Feb]Cow Party【spfa】
    bzoj 1669: [Usaco2006 Oct]Hungry Cows饥饿的奶牛【dp+树状数组+hash】
  • 原文地址:https://www.cnblogs.com/polebug/p/3708315.html
Copyright © 2020-2023  润新知