浙大PAT考试1077~1080(2014上机复试题目)

题目地址:点击打开链接


还是太弱。


英文太差。,,


预计要等待被虐了。。


1077

找最长的公共后缀,暴力就能够写:

#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<cstring>
#include<string>
using namespace std;

char  a[105][1005];
int milen;

void myreverse(char *s)
{
    int len=strlen(s);
    milen=min(len,milen);
    for(int i=0; i<len/2; i++)
    {
        char tmp=s[i];
        s[i]=s[len-1-i];
        s[len-1-i]=tmp;
    }
}

int main()
{
    int n,i,j;

    while(cin>>n)
    {
        gets(a[0]);
        milen=10005;

        for(i=0; i<n; i++)
        {
            gets(a[i]);
            myreverse(a[i]);
        }

        for(i=0; i<milen; i++)
        {
            int flag=0;
            for(j=1; j<n; j++)
            {
                if(a[j][i]!=a[0][i])
                {
                    flag=1;
                    break;
                }
            }
            if(flag) break;
        }

        int p=i;
        char ans[1005];
        for(i=0; i<p; i++)
            ans[i]=a[0][i];
        ans[i]='\0';
        myreverse(ans);

        if(p==0) puts("nai");
        else printf("%s\n",ans);

    }
    return 0;
}

/*
3
Itai nyan~
Ninjin wa iyadanyan~
uhhh nyan~

3
Itai!
Ninjinnwaiyada T_T
T_T
*/


1078:

hash散列啊,二次探測啊,单词看不懂。。

#include<cstdio>
#include<cmath>
#include<iostream>
#include<cstring>
#include<string>
using namespace std;
const int maxn=20005;

int prim[maxn];
int mp[maxn];
int tmpprim[maxn];

int visi[maxn];
int ans[maxn];

void sxprim()
{
    int i,j;
    memset(prim,1,sizeof(prim));
    prim[1]=0;

    for(i=2;i<maxn;i++)
    {
        if(prim[i])
        {
            for(j=i*2;j<maxn;j+=i)
                prim[j]=0;
        }
    }

    int cnt=0;
    for(i=maxn-1;i>=2;i--)
    {
        if(prim[i])
            tmpprim[cnt++]=i;
    }

    for(i=0;i<cnt-1;i++)
    {
        int tmp=tmpprim[i];
        int k=tmpprim[i+1];
        for(j=tmp;j>k;j--)
            mp[j]=tmp;
    }

    for(j=1;j<=tmpprim[cnt-1];j++)
        mp[j]=tmpprim[cnt-1];

    //for(i=1;i<=20;i++)
        //cout<<i<<" "<<mp[i]<<endl;
}

int main()
{
    sxprim();

    int mod,n,i;

    while(cin>>mod>>n)
    {
        mod=mp[mod];  //re-defined
        memset(visi,0,sizeof(visi));

        for(i=0;i<n;i++)
        {
            int x;
            cin>>x;
            int cur=x%mod;
            if(!visi[cur])
            {
                visi[cur]=1;
                ans[i]=cur;
            }
            else
            {
                int cnt=1;
                int flag=0;
                while(cnt<=maxn)   //探測法都搞错了。。
                {
                    int p=(cnt*cnt+cur)%mod;
                    if(!visi[p])
                    {
                        visi[p]=1;
                        ans[i]=p;
                        flag=1;
                        break;
                    }
                    cnt++;
                }

                if(!flag)
                    ans[i]=-1;
            }
        }

        for(i=0;i<n;i++)
        {
            if(i) cout<<" ";
            if(ans[i]>=0) cout<<ans[i];
            else cout<<"-";
        }
        cout<<endl;
    }
    return 0;
}

/*
11 8
2 2 2 2 2 2 2 2
*/


1079:

就是给你一颗树。找叶子结点,叶子结点有值,然后从根往下每一层会以r%添加。

不预处理会超时。。

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<string>
#include<algorithm>
#include<vector>
const int maxn=100005;
using namespace std;

vector <int> mq[maxn];
int n;
double p,r;

/*double cal(int step)
{
    double ans=p;
    for(int i=0; i<step; i++)
        ans=ans*(r/100.0+1.0);
    return ans;

}*/

double tt[maxn];
void cal()   //预处理之后就不会超时了,时间换空间
{
    tt[0]=p;
    for(int i=1;i<maxn;i++)
        tt[i]=tt[i-1]*(1.0+r/100.0);
}

int height[maxn];
double val[maxn];

double ans;

void dfs(int cur)
{
    int len=mq[cur].size();
    int i;
    if(len==0)
    {
        ans+=val[cur]*tt[height[cur]];
        return;
    }
    else
    {
        for(i=0;i<len;i++)
        {
            int p=mq[cur][i];
            height[p]=height[cur]+1;
            dfs(p);
        }
    }
}

int main()
{
    int i;
    while(cin>>n)
    {
        cin>>p>>r;
        cal();
        for(i=0; i<n; i++)
            mq[i].clear();
        height[0]=0;

        int x,chi;
        for(i=0; i<n; i++)
        {
            cin>>x;
            if(x)
            {
                while(x--)
                {
                    cin>>chi;
                    mq[i].push_back(chi);
                }
            }
            else
            {
                cin>>val[i];
            }
        }

        ans=0;
        dfs(0);
        printf("%.1f\n",ans);
    }
    return 0;
}

/*
10 1.80 1.00
3 2 3 5
1 9
1 4
1 7
0 7
2 6 1
1 8
0 9
0 4
0 3
*/


1080:

这个最后也仅仅能拿24分/30分。有个错误。有个数据跑出来段错误。

我预计是数据是每一个学校定额有0的情况。

。不然错的没道理啊。。

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<string>
#include<algorithm>
#include<vector>
#include<set>
const int maxn=40005;
using namespace std;

int n,m,k;
int peo[maxn];
//set <int> ans[maxn];
//set <int> ::iterator mq;
vector <int> ans[105];

struct node
{
    int index;
    int ge;
    int gi;
    int total;
    int aim[6];
}nod[maxn];

struct nodd
{
    int ge;
    int gi;
}last[105];  //暂存每一个学校录取成绩最低的人。假设有同样成绩的也加进去

int cmp(node p1,node p2)
{
    if(p1.total>p2.total) return 1;
    else if(p1.total==p2.total&&p1.ge>p2.ge) return 1;
    //else if(p1.total==p2.total&&p1.ge==p2.ge&&p1.gi>p2.gi) return 1;
    return 0;
}

int main()
{
    int i,j;
    int a[10];
    while(cin>>n>>m>>k)
    {
        for(i=0;i<n;i++)
            ans[i].clear();
        for(i=0;i<m;i++)
            cin>>peo[i];

        for(i=0;i<n;i++)
        {
            cin>>nod[i].ge>>nod[i].gi;
            for(j=0;j<k;j++)
                cin>>nod[i].aim[j];
            nod[i].total=nod[i].ge+nod[i].gi;
            nod[i].index=i;
        }

        sort(nod,nod+n,cmp);
        for(i=0;i<n;i++)
        {
            for(j=0;j<m;j++)
                a[j]=nod[i].aim[j];
            for(j=0;j<m;j++)
            {
                if(peo[a[j]])
                {
                    peo[a[j]]--;
                    ans[a[j]].push_back(nod[i].index);
                    if(peo[a[j]]==0)
                    {
                        last[a[j]].ge=nod[i].ge;
                        last[a[j]].gi=nod[i].gi;
                    }
                    break;
                }
                else
                {
                    if(nod[i].ge==last[a[j]].ge&&nod[i].gi==last[a[j]].gi)
                    {
                        ans[a[j]].push_back(nod[i].index);
                        break;
                    }
                }
            }
        }

        for(i=0;i<m;i++)
        {
            if(ans[i].size()==0) puts("");
            else
            {
                int len=ans[i].size();
                sort(ans[i].begin(),ans[i].end());
                /*mq=ans[i].begin();

                int flag=0;
                for(;mq!=ans[i].end();mq++)
                {
                    if(flag) cout<<" ";
                    else flag=1;
                    cout<<*mq;
                }*/
                for(j=0;j<len;j++)
                {
                    if(j>0) cout<<" ";
                    cout<<ans[i][j];
                }
                cout<<endl;
            }
        }
    }
    return 0;
}

/*
11 6 3
2 1 2 2 2 3
100 100 0 1 2
60 60 2 3 5
100 90 0 3 4
90 100 1 2 0
90 90 5 1 3
80 90 1 0 2
80 80 0 1 2
80 80 0 1 2
80 70 1 3 2
70 80 1 2 3
100 100 0 2 4
*/



转载于:https://www.cnblogs.com/zhchoutai/p/6789237.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
目标检测(Object Detection)是计算机视觉领域的一个核心问题,其主要任务是找出图像中所有感兴趣的目标(物体),并确定它们的类别和位置以下是对目标检测的详细阐述: 一、基本概念 目标检测的任务是解决“在哪里?是什么?”的问题,即定出图像中目标的位置并识别出目标的类别。由于各类物体具有不同的外观、形状和姿态,加上成像时光照、遮挡等因素的干扰,目标检测一直是计算机视觉领域最具挑战性的任务之一。 二、核心问题 目标检测涉及以下几个核心问题: 分类问题:判断图像中的目标属于哪个类别。 定问题:确定目标在图像中的具体位置。 大小问题:目标可能具有不同的大小。 形状问题:目标可能具有不同的形状。 三、算法分类 基于深度学习的目标检测算法主要分为两大类: Two-stage算法:先进行区域生成(Region Proposal),生成有可能包含待检物体的预选框(Region Proposal),再通过卷积神经网络进行样本分类。常见的Two-stage算法包括R-CNN、Fast R-CNN、Faster R-CNN等。 One-stage算法:不用生成区域提议,直接在网络中提取特征来预测物体分类和位置。常见的One-stage算法包括YOLO系列(YOLOv1、YOLOv2、YOLOv3、YOLOv4、YOLOv5等)、SSD和RetinaNet等。 四、算法原理 以YOLO系列为例,YOLO将目标检测视为回归问题,将输入图像一次性划分为多个区域,直接在输出层预测边界框和类别概率。YOLO采用卷积网络来提取特征,使用全连接层来得到预测值。其网络结构通常包含多个卷积层和全连接层,通过卷积层提取图像特征,通过全连接层输出预测结果。 五、应用领域 目标检测技术已经广泛应用于各个领域,为人们的生活带来了极大的便利。以下是一些主要的应用领域: 安全监控:在商场、银行
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值