计算机学院大学生程序设计竞赛(2015’11)

#include <iostream>
#include <stdio.h>
#include <math.h>
using namespace std;

int sum;

void solve(int m)
{
    if(m==1)
        return ;
    
    
    int flag1 = m/2;
    int flag2 = m-flag1;

    //return solve(flag1)+solve(flag2)+flag2-flag1;
    sum += (flag2-flag1);
    solve(flag1);
    solve(flag2);
    
    
}

int main()
{
    int i,a,b,c,n,t;
    scanf("%d",&n);
    while(n--)
    {
        sum = 0;
        scanf("%d",&t);
        solve(t);
        printf("%d\n",sum);
    }
    return 0;
}


#include <iostream>
#include <stdio.h>
#define N 10001
using namespace std;
int main()
{
    int n,a,b,c,k,t,i;
    int aa[N];
    while(scanf("%d%d%d%d",&n,&a,&b,&c)!=EOF)
    {
        k = 0;
        //cin>>n>>a>>b>>c;
        //scanf("%d%d%d%d",&n,&a,&b,&c);
        for(i = 1;i<=n;i++)
            scanf("%d",&aa[i]);
        for(i = 1;i<=n;i++){

            //cin>>t;
            //scanf("%d",&t);
            t = aa[i];
            if(t<a)
                aa[i+1]+=aa[i];
            else if((a<=t)&&(t<b))
                k+=2;
            else if((b<=t)&&(t<c))
                k+=3;
            else
                k+=4;
        }
        //cout<<k<<endl;
        printf("%d\n",k);
    }
    return 0;
}

#include<iostream>
#include <stdio.h>
#include<math.h>
#include <cstdlib>


#define N 1230 //生成100000个质数

using namespace std;

int prime[N]; //一个全局数组,用来保存质数表

void makeprime()//生成质数表的子函数

{
    int j,n=29,i=9,sqrtn;//从第10个质数开始计算,第10个质数是29

    prime[0]=2;

    prime[1]=3;

    prime[2]=5;

    prime[3]=7;

    prime[4]=11;

    prime[5]=13;

    prime[6]=17;

    prime[7]=19;

    prime[8]=23; //之前已有9个质数在表中

    while (i<N) //i是计数变量

    {

        j=0; //每次从表头开始试除

        sqrtn=sqrt(n); //n的平方根

        while (prime[j]<=sqrtn)

        {

            if (n%prime[j]==0)break; //若n能整除质数表中的某数,则跳出

            j++;

        }

        if (prime[j]>sqrtn)
        {
            prime[i]=n;
            i++;
        }

        n+=2; //除了2,偶数不会是质数,因此跳过所有偶数

    }

}

void solve()
{
    for(int i=1;i<N;i++)
        prime[i-1] = prime[i-1]*prime[i-1];
}

int main()

{
    int t,m,flag;
    makeprime();
    solve();
/*
    for (int i=1; i<N; i++)

    {
        cout<<prime[i-1]<<" ";    //每输出10个数换行
        if (i%10==0)cout<<endl;
    }
*/
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d",&m);
        int Max = 99999999;
        for(int j = 1;j<N;j++)
            if(abs(m-prime[j-1])<=Max){
                   // printf("%d %d\n",abs(m-prime[j-1]),Max);
                Max = abs(m-prime[j-1]);
                flag = prime[j-1];
                //printf("%d\n",Max);
                }
            printf("%d\n",flag);
    }


    //system("pause");

    return 0;
}

#include <iostream>
#include <stdio.h>
#include <algorithm>
using namespace std;

int cmp(int a,int b)
{
    return a<b;
}

int main()
{
    int i,j,t;
    int n,m,k,flag;
    int a[10001],b[10001];
    scanf("%d",&t);

    while(t--)
    {
        long long sum1 = 0,sum2 = 0,index=0;

        scanf("%d%d%d",&n,&m,&k);

        for(i=1;i<=n;i++)
            scanf("%d",&a[i]);
        //sort(a+1,a+n+1);
        for(j=1;j<=m;j++)
        {
            scanf("%d",&flag);
            //b[i] = a[flag];
            sum1+=a[flag];
            a[flag]=0;

        }

        if(sum1>k)
            index = -1;
        else
        {
            sum2 = k-sum1;
            //cout<<sum1<<" "<<sum2<<endl;
            sort(a+1,a+n+1,cmp);

            //for(i=1;i<=n;i++)
        //        cout<<a[i]<<" ";

            for(i=1;i<=n;i++)
            {
                if(sum2>=a[i])
                {
                    sum2-=a[i];
                    index++;
                }
                else
                    break;
            }
            //index+=m;
        }
        printf("%d\n",index);
        //sort(b+1,b+m+1);



    }
    return 0;
}


posted @ 2015-12-05 11:14  __夜风  阅读(135)  评论(0编辑  收藏  举报