zoukankan      html  css  js  c++  java
  • 水过的题

    BZOJ 3767: A+B Prlblem加强版:BZOJ 很少见的水题 高精加 python水过

    1 a=int(raw_input())
    2 b=int(raw_input())
    3 print a+b
    View Code

    BZOJ 3043: IncDec Sequence:差分过后就成了要使差分数列全为0的最小次数,第二问即将差分数列全削成正数或负数后,剩下的操作可以作用在前一段区间,也可以后一段区间,因此会造成不同数列的情况

    /**************************************************************
        Problem: 3043
        User: love_zyf
        Language: C++
        Result: Accepted
        Time:332 ms
        Memory:2836 kb
    Description
    
    给定一个长度为n的数列{a1,a2...an},每次可以选择一个区间[l,r],使这个区间内的数都加一或者都减一。
    问至少需要多少次操作才能使数列中的所有数都一样,并求出在保证最少次数的前提下,最终得到的数列有多少种。
    
    Input
    
    第一行一个正整数n 
    接下来n行,每行一个整数,第i+1行的整数表示ai。
    。
    
    Output
    
    第一行输出最少操作次数
    第二行输出最终能得到多少种结果
    
    Sample Input
    
    4
    
    1
    
    1
    
    2
    
    2
    
    
    
    Sample Output
    
    
    
    1
    
    2
    
    
    
    HINT
    
    对于100%的数据,n=100000,0<=ai<2147483648
    ****************************************************************/
     
    //uva
    #include <stdio.h>
    #include <iostream>
    #include <string.h>
    #include <algorithm>
    #include <queue>
    #define maxn 100009
    #define esp 0.001
    using namespace std;
    long long a[maxn],b[maxn],c=0,d=0;
    int main()
    {
        int n;
        scanf("%d%lld",&n,&a[1]);
        for(int i=2;i<=n;i++)
        {
            scanf("%lld",&a[i]);
            b[i]=a[i]-a[i-1];
            if(b[i]>0)c+=b[i];if(b[i]<0)d-=b[i];
        }
        printf("%lld
    %lld
    ",max(c,d),abs(c-d)+1);
        return 0;
    }
    View Code

    POJ 2181 Jumping Cows:一开始看错题意,以为是连续的,样例答案怎么也没推出来,看清题意后发现是DP,dp[i][0]表示到第i个数,第i个数是选出的数的奇数项的最大值,dp[i][1]表示使偶数项时的最大值,转移很显然 见代码

     1 //dp[i][0]=max(dp[i-1][1]+a[i],a[i]);dp[i][1]=dp[i-1][0]-a[i];
     2 #include <stdio.h>
     3 #include <iostream>
     4 #include <string.h>
     5 #include <algorithm>
     6 #include <queue>
     7 #define maxn 150090
     8 #define esp 0.001
     9 #define inf 0x3f3f3f3f
    10 int max(int x,int y){return x<y?y:x;}
    11 using namespace std;
    12 int dp[maxn][2];
    13 int main()
    14 {
    15     int n,x,y,z,ans=0,sign=1;
    16     scanf("%d",&n);
    17     for(int i=1;i<=n;i++,sign*=-1)
    18     {
    19         scanf("%d",&x);
    20         dp[i][0]=max(dp[i-1][1]+x,dp[i-1][0]);
    21         dp[i][1]=max(dp[i-1][1],dp[i-1][0]-x);
    22         ans=max(ans,max(dp[i][0],dp[i][1]));
    23     //    printf("%d %d
    ",dp[i][0],dp[i][1]);
    24     }
    25     printf("%d
    ",ans);
    26     return 0;
    27 }
    View Code

     POJ 1258 Agri-Net:裸MST

     1 #include <stdio.h>
     2 #include <iostream>
     3 #include <string.h>
     4 #include <algorithm>
     5 #include <queue>
     6 #define maxn 3000
     7 #define esp 0.001
     8 #define inf 0x3f3f3f3f
     9 using namespace std;
    10 int father[maxn],dis[maxn][maxn];
    11 struct T
    12 {
    13     int x;
    14     int y;
    15     int v;
    16 }a[maxn*1000];
    17 int cmp(T x,T y)
    18 {
    19     return x.v<y.v;
    20 }
    21 int find(int x)
    22 {
    23     if(x==father[x])return x;
    24     return father[x]=find(father[x]);
    25 }
    26 int main()
    27 {
    28     int n,i;
    29     while(scanf("%d",&n)!=EOF)
    30     {
    31         int h=0,ans=0;
    32         for(i=1;i<=n;i++)father[i]=i;
    33         for(i=1;i<=n;i++)
    34         {
    35             for(int j=1;j<=n;j++)scanf("%d",&dis[i][j]);
    36         }
    37         for(int i=1;i<=n;i++)
    38         {
    39             for(int j=1;j<i;j++)if(dis[i][j]!=0)
    40             {
    41                 a[++h].x=i;
    42                 a[h].y=j;
    43                 a[h].v=dis[i][j];
    44             }
    45         }
    46         sort(a+1,a+1+h,cmp);
    47         for(i=1;i<=h;i++)
    48         {
    49             int xx=find(a[i].x),yy=find(a[i].y);
    50             if(xx!=yy)
    51             {
    52                 father[xx]=yy;
    53                 ans+=a[i].v;
    54             }
    55         }
    56         printf("%d
    ",ans);
    57     }
    58     return 0;
    59 }
    View Code

    POJ 1251 Jungle Roads:同上 裸MST

     1 #include <stdio.h>
     2 #include <iostream>
     3 #include <string.h>
     4 #include <algorithm>
     5 #include <queue>
     6 #define maxn 100009
     7 #define esp 0.001
     8 #define inf 0x3f3f3f3f
     9 using namespace std;
    10 int h,father[maxn];
    11 int find(int x)
    12 {
    13     if(x==father[x])return x;
    14     return father[x]=find(father[x]);
    15 }
    16 struct T{int x;int y;int v;}a[maxn];
    17 int cmp(T x,T y){return x.v<y.v;}
    18 int main()
    19 {
    20     int n,i;
    21     char ch[10],ch2[10];
    22     while (1)
    23     {
    24         h=0;
    25         int ans=0,m,x;
    26         scanf("%d",&n);
    27         if(n==0)break;
    28         for(int i=1;i<=n;i++)father[i]=i;
    29         for(i=1;i<=n-1;i++)
    30         {
    31             scanf("%s%d",ch,&m);
    32             for(int j=1;j<=m;j++)
    33             {
    34                 scanf("%s%d",ch2,&x);
    35                 a[++h].x=(int)ch[0]-'A'+1;
    36                 a[h].y=(int)ch2[0]-'A'+1;
    37                 a[h].v=x;
    38             }
    39         }
    40         sort(a+1,a+1+h,cmp);
    41         for(i=1;i<=h;i++)
    42         {
    43             int xx=find(a[i].x),yy=find(a[i].y);
    44             if(xx!=yy)
    45             {
    46                 ans+=a[i].v;
    47                 father[xx]=yy;
    48             }
    49         }
    50         printf("%d
    ",ans);
    51     }
    52     return 0;
    53 }
    View Code

    POJ 2976 Dropping tests:裸的01分数规划

     1 #include <stdio.h>
     2 #include <iostream>
     3 
     4 #include <string.h>
     5 
     6 #include <algorithm>
     7 
     8 #include <queue>
     9 
    10 #define maxn 200090
    11 
    12 #define esp 0.00001
    13 
    14 #define inf 0x3f3f3f3f
    15 
    16 using namespace std;
    17 
    18 int n,k,a[maxn],b[maxn];
    19 
    20 double c[maxn];
    21 
    22 int judge(double x)
    23 
    24 {
    25 
    26     double ans=0;
    27 
    28     for(int i=1;i<=n;i++)c[i]=(double)a[i]-x*b[i];
    29 
    30     sort(c+1,c+1+n);
    31 
    32     for(int i=k+1;i<=n;i++)ans+=c[i];
    33 
    34     if(ans>0)return 1;else return 0;
    35 
    36 }
    37 
    38 int main()
    39 
    40 {
    41 
    42     while(1)
    43 
    44     {
    45 
    46         scanf("%d%d",&n,&k);
    47 
    48         if(n==0&&k==0)break;
    49 
    50         for(int i=1;i<=n;i++)scanf("%d",&a[i]);
    51 
    52         for(int i=1;i<=n;i++)scanf("%d",&b[i]);
    53 
    54         double l=0,r=1000;
    55 
    56         while(r-l>esp)
    57 
    58         {
    59 
    60             double mid=(r+l)/2;
    61 
    62             if(judge(mid)==1)l=mid;else r=mid;
    63 
    64         }
    65         printf("%d
    ",(int)(l*100+0.5));
    66 
    67     }
    68     return 0;
    69 
    70 }
    71 
    72  
    View Code

    POJ 1014 Dividing:做多重背包即可,需要二进制优化,另外行尾需要空行 不然PE

     1 #include <stdio.h>
     2 #include <iostream>
     3 #include <string.h>
     4 #include <algorithm>
     5 #include <queue>
     6 #define maxn 1200090
     7 #define esp 0.00001
     8 #define inf 0x3f3f3f3f
     9 using namespace std;
    10 int a[10],value[maxn],h=0;
    11 bool dp[maxn];
    12 int main()
    13 {
    14     int cas=0;
    15     while(1)
    16     {
    17         int sum=0;h=0;
    18         memset(dp,0,sizeof(dp));
    19         scanf("%d%d%d%d%d%d",&a[1],&a[2],&a[3],&a[4],&a[5],&a[6]);
    20         if((a[1]|a[2]|a[3]|a[4]|a[5]|a[6])==0)break;
    21         for(int i=1;i<=6;i++)sum+=i*a[i];
    22         if((sum&1)==1)
    23         {
    24             printf("Collection #%d:
    Can't be divided.
    
    ",++cas);
    25             continue;
    26         }
    27         sum>>=1;
    28         for(int k=1;k<=6;k++)
    29         {
    30             int t=1;
    31             while(t<=a[k])
    32             {
    33                 value[++h]=t*k;
    34                 a[k]-=t;
    35                 t<<=1;
    36             }
    37             if(a[k]>0)value[++h]=a[k]*k;
    38         }
    39         dp[0]=1;
    40         for(int i=1;i<=h;i++)
    41         {
    42             for(int j=sum;j>=0;j--)
    43             {
    44                 if(j-value[i]>=0)dp[j]=dp[j]|dp[j-value[i]];
    45             }
    46         }
    47         if(dp[sum]==1)
    48             printf("Collection #%d:
    Can be divided.
    
    ",++cas);
    49         else printf("Collection #%d:
    Can't be divided.
    
    ",++cas);
    50     }
    51     return 0;
    52 }
    View Code

     POJ 1862:stripies:最大的数显然要根号很多次 放进一个堆里面,然后每次将最大的两个数合并即可

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<queue>
     4 #include<algorithm>
     5 #include<math.h>
     6 #define maxn 100009
     7 using namespace std;
     8 int a[maxn];
     9 priority_queue<double>q;
    10 int main()
    11 {
    12     int n,x;
    13     scanf("%d",&n);
    14     for(int i=1;i<=n;i++)
    15     {
    16         scanf("%d",&x);
    17         q.push((double)x);
    18     }
    19     for(int i=1;i<=n-1;i++)
    20     {
    21         double u=q.top();
    22         q.pop();
    23         double v=q.top();
    24         q.pop();
    25         q.push(1.0*2*sqrt((double)u*v));
    26     }
    27     double u=q.top();
    28     printf("%.3lf
    ",u);
    29     return 0;
    30 }
    View Code

     POJ 3785 The Next Permutation:next_permutation大法好

     1 #include<cstdio>
     2 #include<string.h>
     3 #include<iostream>
     4 #include<algorithm>
     5 #define maxn 6000
     6 using namespace std;
     7 int main()
     8 {
     9     int t,cas;
    10     char ch[1000000];
    11     scanf("%d",&t);
    12     while(t--)
    13     {
    14         scanf("%d%s",&cas,ch+1);
    15         int len=strlen(ch+1);
    16         int flag=0;
    17         for(int i=2;i<=len;i++)
    18         {
    19             if(ch[i]>ch[i-1]){flag=1;break;}
    20         }
    21         if(flag==0)
    22         {
    23             printf("%d BIGGEST
    ",cas);
    24             continue;
    25         }
    26         next_permutation(ch+1,ch+1+len);
    27         printf("%d %s
    ",cas,ch+1);
    28     }
    29     return 0;
    30 }
    View Code

    POJ 3782 Equal Sum Partitions:数据很水很水很水很水,暴力一发即可

     1 #include<cstdio>
     2 #include<string.h>
     3 #include<iostream>
     4 #include<algorithm>
     5 #define maxn 6000900
     6 using namespace std;
     7 int a[maxn];
     8 int main()
     9 {
    10     int t,cas,n,temp;
    11     scanf("%d",&t);
    12     while(t--)
    13     {
    14         int sum=0,s=0;
    15         scanf("%d%d",&cas,&n);
    16         for(int i=1;i<=n;i++){scanf("%d",&a[i]);s+=a[i];}
    17         for(int i=1;i<=n;i++)
    18         {
    19             int flag=0;
    20             sum+=a[i];
    21             if(sum>(s>>1)){printf("%d %d
    ",cas,s);break;}
    22             temp=0;
    23             for(int j=i+1;j<=n;j++)
    24             {
    25                 temp+=a[j];
    26                 if(temp>sum){flag=1;break;}
    27                 if(temp==sum)temp=0;
    28             }
    29             if(flag==0 && temp==0)
    30             {
    31                 printf("%d %d
    ",cas,sum);
    32                 break;
    33             }
    34         }
    35     }
    36     return 0;
    37 }
    View Code

     POJ 3192 DNA Assembly:论暴力的正确姿势

     1 #include<cstdio>
     2 #include<string.h>
     3 #include<iostream>
     4 #include<algorithm>
     5 #include<queue>
     6 #include<map>
     7 #define maxn 400009
     8 #define maxm 4000009
     9 using namespace std;
    10 char ch[10][10000],ans[maxn];
    11 int prem[maxn];
    12 int main()
    13 {
    14     int n,s=1,minx=0x3f3f3f3f;
    15     scanf("%d",&n);
    16     for(int i=1;i<=n;i++)
    17     {
    18         s*=i;
    19         prem[i]=i;
    20         scanf("%s",ch[i]+1);
    21     }
    22     for(int uu=1;uu<=s;uu++)
    23     {
    24         memset(ans,0,sizeof(ans));
    25         int now=0;
    26         for(int j=1;j<=n;j++)
    27         {
    28             int p=prem[j],u=strlen(ch[p]+1),ansn=now+1;
    29             for(int i=max(now-u+1,1);i<=now;i++)
    30             {
    31                 int idx=i;
    32                 while(ch[p][idx-i+1]==ans[idx]&&idx<=now)
    33                 idx++;
    34                 if(idx==now+1){ansn=i;break;}
    35             }
    36             for(int i=ansn;i<=ansn+u;i++)
    37             ans[i]=ch[p][i-ansn+1];
    38             now=ansn+u-1;
    39         }
    40         if(now<minx)minx=now;
    41         next_permutation(prem+1,prem+1+n);
    42     }
    43     printf("%d
    ",minx);
    44     return 0;
    45 }
    View Code

    POJ 1094 Sorting It All Out

     1 #include<cstdio>
     2 #include<iostream>
     3 #include<string.h>
     4 #include<map>
     5 #include<algorithm>
     6 #define maxn 10000
     7 using namespace std;
     8 int a[100][100],b[100][100],n,m,ansn[maxn];
     9 int floyd()
    10 {
    11     int res=0;
    12     for(int k=1;k<=n;k++)
    13     {
    14         for(int i=1;i<=n;i++)if(i!=k)
    15         {
    16             for(int j=1;j<=n;j++)if(j!=i&&j!=k)
    17             {
    18                 b[i][j]=b[i][j]|(b[i][k]&b[k][j]);
    19             }
    20         }
    21     }
    22     for(int i=1;i<=n;i++)
    23     {
    24         for(int j=1;j<=n;j++)
    25         {
    26             if(b[i][j])res++;
    27             if(b[i][j]&&b[j][i])
    28             return -1;
    29         }
    30     }
    31     if(res==((n*(n-1))>>1))return 1;
    32     return 0;
    33 }
    34 int main()
    35 {
    36     while(1)
    37     {
    38         char c1,c2;int ans=-1,flag=0,ans2=-1;
    39         scanf("%d%d",&n,&m);
    40         memset(a,0,sizeof(a));
    41         memset(ansn,0,sizeof(ansn));
    42         if(n==0&&m==0)break;
    43         getchar();
    44         for(int i=1;i<=m;i++)
    45         {
    46             scanf("%c<%c",&c1,&c2);
    47             getchar();
    48             if(flag==0)
    49             {
    50                 a[c1-'A'+1][c2-'A'+1]=1;
    51                 memcpy(b,a,sizeof(a));
    52                 int u=floyd();
    53                 if(u==1)
    54                 {ans=i;flag=1;}
    55                 else if(u==-1)
    56                 {
    57                     ans2=i;
    58                     flag=1;
    59                 }
    60             }
    61         }
    62         if(ans!=-1)
    63         {
    64             memcpy(b,a,sizeof(a));
    65             floyd();
    66             for(int i=1;i<=n;i++)
    67             {
    68                 int flag=0;
    69                 for(int j=1;j<=n;j++)
    70                 {
    71                     if(b[i][j]==1)flag++;
    72                 }
    73                 ansn[n-flag]=i;
    74             }
    75             printf("Sorted sequence determined after %d relations: ",ans);
    76             for(int i=1;i<=n;i++)
    77             {
    78                 printf("%c",(char)(ansn[i]-1+'A'));
    79             }
    80             printf(".
    ");
    81         }
    82         else if(ans2!=-1)
    83         {
    84             printf("Inconsistency found after %d relations.
    ",ans2);
    85         }
    86         else printf("Sorted sequence cannot be determined.
    ");
    87     }
    88     return 0;
    89 }
    View Code
  • 相关阅读:
    《深度剖析CPython解释器》25. 解密Python中的多线程(第一部分):初识GIL、以及多个线程之间的调度机制
    《深度剖析CPython解释器》24. Python运行时环境的初始化、源码分析Python解释器在启动时都做了哪些事情?
    《深度剖析CPython解释器》23. 剖析Python中模块的导入机制、Python是如何加载模块的
    《深度剖析CPython解释器》22. 解密Python中的生成器对象,从字节码的角度分析生成器的底层实现以及执行逻辑
    《深度剖析CPython解释器》21. Python类机制的深度解析(第五部分): 全方位介绍Python中的魔法方法,一网打尽
    《深度剖析CPython解释器》20. Python类机制的深度解析(第四部分): 实例对象的创建、以及属性访问
    redis 集群
    redis 主从
    文件的上传与下载
    Jsp
  • 原文地址:https://www.cnblogs.com/philippica/p/4123977.html
Copyright © 2011-2022 走看看