澧阳中学学习吧 关注:4贴子:590
  • 19回复贴,共1

四大菜籽油解题报告

只看楼主收藏回复

渣渣语文,渣渣数学,渣渣思路,渣渣算法,渣渣速度,大神勿喷。


1楼2016-07-04 17:25回复
    代码:
    #include<iostream>
    #include<cstring>
    #include<cstdlib>
    #include<cstdio>
    #include<string>
    #include<cmath>
    using namespace std;
    const int M=105,N=555075;
    int s,t,i,j,k,n,m,w[M],ans,f[N],l,a[N];
    bool ff[N],qw[N];
    void st(int l,int r)
    {
    int i=l,j=r,x=w[(i+j)/2];
    while (i<=j)
    {
    while (w[i]<x) i++;
    while (w[j]>x) j--;
    if (i<=j)
    {
    k=w[i];w[i]=w[j];w[j]=k;
    i++;j--;
    }
    }
    if (i<r) st(i,r);
    if (l<j) st(l,j);
    }
    void cw()
    {
    for (i=1;i<=m;i++)
    if ((w[i]>=s)&&(w[i]%s==0)) ans++;
    cout<<ans<<endl;
    }
    void sw()
    {
    st(1,m);k=0;
    for (i=s;i<=t;i++) k+=i;
    w[0]=0;
    for (i=m;i>=1;i--) w[i]-=w[i-1];
    for (i=1;i<=m;i++)
    {
    if (w[i]>k) w[i]=w[i-1]+k;
    else w[i]+=w[i-1];
    qw[w[i]]=1;
    }
    n=w[m]+k;
    for (i=1;i<=n;i++) f[i]=111;
    ff[0]=1;f[0]=0;
    for (i=0;i<=w[m];i++)
    if (ff[i])
    {
    for (j=s;j<=t;j++)
    if (f[i+j]>f[i]+qw[i+j])
    {
    if (!ff[i+j]) ff[i+j]=1;
    f[i+j]=f[i]+qw[i+j];
    }
    }
    ans=111;
    for (i=w[m];i<=n;i++)
    if (f[i]<ans) ans=f[i];
    cout<<ans<<endl;
    }
    int main()
    {
    freopen("river.in","r",stdin);
    freopen("river.out","w",stdout);
    cin>>n>>s>>t>>m;
    for (i=1;i<=m;i++) scanf("%D",&w[i]);
    if (s==t) cw();
    else sw();
    fclose(stdin);fclose(stdout);
    return 0;
    }


    5楼2016-07-05 08:51
    回复
      请点击只看楼主,谢谢。


      7楼2016-07-05 08:59
      收起回复
        题目未分类,毕竟渣渣水平,学得也很乱,只求能做出来。


        8楼2016-07-05 09:03
        收起回复
          人太少了,我们要拉几个人


          IP属地:安徽16楼2016-07-22 08:58
          收起回复
            发个无语程序


            IP属地:安徽17楼2016-07-22 09:01
            回复
              #include <iostream>
              #include <cstdio>
              #include <cstring>
              #include <string>
              #include <cmath>
              using namespace std;
              const int INF=10086110;
              int f[121][121],i,k;
              int g[30][30],c[121],s[26],n,m,len,c1,c2;
              string st;
              void dp()
              {
              len=st.length();
              memset(f,0,sizeof(f));
              for(int i=1;i<=len;i++) f[i][i]=1<<(s[st[i-1]-65]-1);
              for(int i=1;i<len;i++) f[i][i+1]=g[s[st[i-1]-65]][s[st[i]-65]];
              for(int l=3;l<=len;l++)
              for(int i=1;i<=len-l+1;i++)
              for(int j=i;j<i+l-1;j++)
              for(c1=1;c1<=26;c1++)
              if((f[i][j]&(1<<(c1-1)))>0)
              for(c2=1;c2<=26;c2++)
              if((f[j+1][i+l-1]&(1<<(c2-1)))>0)
              f[i][i+l-1]=(f[i][i+l-1]|g[c1][c2]);
              for(int i=1;i<=len;i++) c[i]=INF; c[0]=0;
              for(int i=1;i<=len;i++)
              for(int j=0;j<i;j++)
              if(((f[j+1][i]&(1<<18))>0)&&(c[i]>c[j]+1))
              c[i]=c[j]+1;
              if(c[len]==INF) cout<<"NIE"<<endl;
              else cout<<c[len]<<endl;
              }
              int main()
              {
              freopen("gen.in","r",stdin);
              freopen("gen.out","w",stdout);
              for(int i=0;i<=25;i++)
              s[i]=i+1;
              cin>>n; getline(cin,st);
              for(int i=1;i<=n;i++)
              {
              getline(cin,st);
              g[s[st[1]-65]][s[st[2]-65]]=(g[s[st[1]-65]][s[st[2]-65]])|(1<<(s[st[0]-65]-1));
              }
              cin>>k; getline(cin,st);
              for(int i=1;i<=k;i++)
              {
              getline(cin,st); dp();
              }
              fclose(stdin); fclose(stdout);
              return 0;
              }


              IP属地:安徽18楼2016-07-22 09:02
              收起回复
                广告是个什么鬼


                IP属地:安徽20楼2016-07-22 09:02
                回复