一些水题

来源:互联网 发布:移动网络转换电信 编辑:程序博客网 时间:2024/06/06 19:59

http://acm.hrbeu.edu.cn/index.php?act=tijie


谁是中间的那个

#include<iostream>#include<algorithm>using namespace std;int a[100008];int main(){        int n;        scanf("%d",&n);        for(int i=1;i<=n;++i)                scanf("%d",&a[i]);        sort(a+1,a+n+1);        printf("%d\n",a[(n+1)/2]);        return 0;}


一问一答

#include<iostream>#include<algorithm>#include<cstdio>using namespace std;int num[120000];int main(){    //freopen("d:\\test.txt","r",stdin);    int n,m;    char str[10];    scanf("%d",&n);    for(int i=1;i<=n;++i)        scanf("%d",&num[i]);    scanf("%s",str);    sort(num+1,num+n+1);    scanf("%d",&m);    for(int j,i=1;i<=m;++i)    {        scanf("%d",&j);        printf("%d\n",num[j]);    }    return 0;}

487 - 3279

#include<iostream>#include<cstdio>#include<algorithm>#include<string.h>#include<map>using namespace std;map<char,int>m;void init(){    m['0']=0;    m['1']=1;    m['2']=2;    m['3']=3;    m['4']=4;    m['5']=5;    m['6']=6;    m['7']=7;    m['8']=8;    m['9']=9;    m['A']=m['B']=m['C']=2;    m['D']=m['E']=m['F']=3;    m['G']=m['H']=m['I']=4;    m['J']=m['K']=m['L']=5;    m['M']=m['N']=m['O']=6;    m['P']=m['R']=m['S']=7;    m['T']=m['U']=m['V']=8;    m['W']=m['X']=m['Y']=9;}int main(){    int n,i,j,t,*num;    char s[256];    init();    //freopen("d:\\test.txt","r",stdin);    scanf("%d",&n);    num=new int[n];    getchar();    for(i=0;i<n;++i)    {        scanf("%s",s);        getchar();        t=0;        for(j=0;s[j];++j)        {            if(s[j]=='-')                continue;            t=t*10+m[s[j]];        }        num[i]=t;    }    sort(num,num+n);    int judge=0;      for(i=0;i<n;++i)    {                     j=i;        while(i+1<n && num[i]==num[i+1])             i++;        if(i!=j)         {            printf("%03d-%04d %d\n",num[i]/10000,num[i]%10000,i-j+1);            judge=1;        }    }    delete []num;    if(judge==0)         printf("No duplicates.\n");    return 0;}


DNA排序 代码1

#include<iostream>#include<cstring>#include<cstdio>#define INF 0xffffffusing namespace std;char str[200][200];int value[200];int main(){    //freopen("d:\\test.txt","r",stdin);    int n,m,p;    memset(value,0,sizeof(value));    scanf("%d%d",&m,&n);    value[0]=INF;    for(int i=1;i<=n;++i)    {        scanf("%s",str[i]);        for(int j=0;j<n;++j)            for(int k=j+1;k<m;++k)                if(str[i][j]>str[i][k])                    value[i]++;    }    p=0;    for(int i=1;i<=n;++i)    {        for(int j=1;j<=n;++j)            if(value[j]<value[p])                p=j;        printf("%s\n",str[p]);        value[p]=INF;    }    return 0;}

代码2

#include<iostream>#include<cstdio>#include<string>#include<algorithm>using namespace std;int cnt[108];struct node{    string s;    int cnt;}a[108];bool cmp(node a,node b){    return a.cnt<b.cnt;}int main(){    int i,j,k,n,m;    //freopen("d:\\test.txt","r",stdin);    cin>>n>>m;    for(i=0;i<m;++i)    {        cin>>a[i].s;        a[i].cnt=0;        for(j=0;j<n;++j)            for(k=j+1;k<n;++k)                if(a[i].s[j]>a[i].s[k])                    a[i].cnt++;    }    stable_sort(a,a+m,cmp);    for(i=0;i<m;++i)        cout<<a[i].s<<endl;    return 0;}

统计频率 map二叉查找树

#include<iostream>#include<map>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;char str[50];int cnt=0;map<string,int> counter;map<string,int>::iterator it;int main(){    //freopen("d:\\test.txt","r",stdin);    while(gets(str)!=NULL)    {        counter[str]++;        cnt++;    }    cout.setf(ios::fixed);    cout.precision(4);    for(it=counter.begin();it!=counter.end();it++)    {        double per=100*it->second*1.0/cnt;        cout<<it->first<<" "<<per<<endl;    }    return 0;}

开锁 这题有点问题

#include<iostream>#include<cstdio>#include<fstream>using namespace std;int main(){    //fstream cin("d:\\test.txt");    int n1,n2,n3,n4;    while(cin>>n1>>n2>>n3>>n4 && (n1+n2+n3+n4))    {        int d=720;        if(n1<n2)            d+=(40+n1-n2)*9;        else            d+=(n1-n2)*9;        d+=360;        if(n2<n3)            d+=(n3-n2)*9;        else            d+=(40+n3-n2)*9;        if(n3<n4)            d+=(40+n3-n4)*9;        else            d+=(n3-n4)*9;        cout<<d<<endl;    }    return 0;}

猜数 poj-2328 这题的范围是0~11 无语,copy题目也要认真点

#include<stdio.h>#include<string.h>const int maxn=100;int n, left, right;char str[maxn];int main(){    //freopen("d:\\test.txt","r",stdin);    while(scanf("%d", &n)!=EOF && n)    {        getchar();        left=0,         right=11;        while(1)        {            gets(str);            if(strstr(str,"right on"))                break;            else if(strstr(str,"too low"))            {                if(n>left)                    left=n;            }            else            {                if(n<right)                    right=n;            }            scanf("%d",&n);            getchar();         }         if(left<n && n<right)            puts("xiaoz may be honest");         else             puts("xiaoz is dishonest");   }   return 0;}

欧几里得游戏

两个数a和b,总会出现的一个局面是b,a%b,这是必然的。

如果a>=b&&a<2*b,那么只有一种情况,直接到b,a%b。否则有多种情况。

对于对于a/b==1这种局面,只可能到b,a%b,没有选择。

而a/b>=2的话,先手可以选择由谁面对b,a%b这样的局势

显然选手足够聪明b,a%b谁必胜必败已经清楚,先手在a/b>=2的局面必胜


#include<iostream>#include<cstdio>#include<algorithm>using namespace std;int main(){    //freopen("d:\\test.txt","r",stdin);    int a,b;    while(scanf("%d%d",&a,&b)!=EOF && a+b)    {        if(a<b)            swap(a,b);        bool flag=true;        while(1)        {            if(b==0 || a%b==0 || a/b>=2)                break;            int t=a;            a=b;            b=t-a;            flag=!flag;        }        if(flag)            printf("Stan wins\n");        else            printf("Ollie wins\n");    }    return 0;}

求最大公约数

#include<stdio.h>#include<stdlib.h>long long gcd(long long a,long long b){    return b==0?a:gcd(b,a%b);}int main(){    long long a,b;    while(scanf("%lld%lld",&a,&b)!=EOF)        printf("%lld\n",gcd(a,b));    return 0;}

欧拉函数

#include<stdio.h>#include<stdlib.h>long long phi(long long a){    long long t=a,i;    for(i=2;i*i<=a;++i)        if(a%i==0)        {            while(!(a%i))                a/=i;            t=t/i*(i-1);        }    if(a!=1)        t=t/a*(a-1);    return t;}int main(){    long long a;    while(scanf("%lld",&a)!=EOF)        printf("%lld\n",phi(a));    return 0;}

无脑总统的火星国

#include<stdio.h>#include<string.h>int map[105][105],n,m,many,t,can[105];int dfs(int x){    int i;    can[x]=1;    for(i=1;i<=n;++i)        if(map[x][i] && !can[i])            dfs(i);    return 1;}int main(){    int i,j;    while(scanf("%d",&n)!=EOF)    {        many=0;        memset(can,0,sizeof(can));        memset(map,0,sizeof(map));        for(i=1;i<=n;++i)        {            scanf("%d",&m);            for(j=1;j<=m;++j)            {                scanf("%d",&t);                map[i][t]=1;                map[t][i]=1;            }        }        for(i=1;i<=n;++i)            if(!can[i])                many=many+dfs(i);        printf("%d\n",many);    }    return 0;}

占武卖花

#include<stdio.h>long long f[32];int main(){    int i;    f[0]=1;    for(i=1;i<=30;++i)        f[i]=f[i-1]*3;    int n;    while(scanf("%d",&n) && n)    {        long long ans=((long long)1<<2*n)-((long long)1<<(n+1))+f[n]+2;        ans+=(n&1)?-1:1;        printf("%lld\n",ans>>2);    }    return 0;}

竞赛游戏

#include<iostream>#include<cmath>#include<algorithm>using namespace std;int s[55];int main(){    int t,n,sum;    while(!cin.eof() && cin>>n)    {        sum=0;        for(int i=0;i<n;++i)        {            cin>>t;            sum^=t;        }        if(sum==0)            cout<<"No"<<endl;        else            cout<<"Yes"<<endl;    }    return 0;}

取石子游戏

#include<iostream>#include<cmath>#include<cstdlib>using namespace std;int main(){    int a,b,c,k;    while(!cin.eof() && cin>>a>>b)    {        if(a>b)        {            int t=a;            a=b;            b=t;        }        c=b-a;        k=(int)((1.0+sqrt(5.0))/2.0*c);        if(k==a)            cout<<0<<endl;        else            cout<<1<<endl;    }    return 0;}

一个新的取石子游戏

#include<cstdio>#include<iostream>#include<algorithm>using namespace std;int a[1000];int main(){    int n;    bool flag=0;    while(cin>>n && n)    {        for(int i=0;i<n;++i)            cin>>a[i];        sort(a,a+n);        if(n%2==0)        {            flag=true;            for(int i=0;i<n && flag;i+=2)                if(a[i]!=a[i+1])                    flag=false;            if(flag)                cout<<0<<endl;            else                cout<<1<<endl;        }        else            cout<<1<<endl;    }    return 0;}



原创粉丝点击