学姐学长们的测试

2018-5-26 学长学姐们决定给我们来一次测试。(milky-way,zzzyc,xMinh)

这次考试总结一下就是把能想到的错误全犯了一遍。。。

T1:最小子段和

给定n个数,选出连续且非空的一段,使得子段和最小。内存:3MB

做这道题的时候不知道怎么想的,以为3MB只能开4个int,于是就爆了int,发现的时候已经交上去不能改了。只得了40,白丢了60分。。。

这道题我的做法很奇怪,是把所有数都取反后做最大子段和,最后输出时再取反。

# include <cstdio>
# include <iostream>

using namespace std;

long long n,x,dp,ans=0;

int main()
{
    scanf("%lld",&n);
    scanf("%lld",&x);
    x=-x;
    ans=x;
    if(x>0) dp=x;
        else dp=0;
    for (int i=2;i<=n;i++)
    {
        scanf("%lld",&x);
        x=-x;
        if(dp>=0) dp+=x;
        else dp=x;
        ans=max(ans,dp);
    }
    printf("%lld",-ans);
    return 0;
}

A

T2:

在n*m的矩阵中选出2个数,要求a在b的右方或上方或右上方,b-a最大。内存:4MB

这题错的也是很蹊跷,虽然做法没错,然而我算的是a-b。。。理论得分:100;实际得分:20;

# include <cstdio>
# include <iostream>
# include <cstring>

using namespace std;

const int inf=-1000000001;
int m,n,x,col,ans=inf;
int Max[1001];

int main()
{
    for (int i=1;i<=1000;i++)
        Max[i]=inf;
    scanf("%d%d",&n,&m);
    for (int i=1;i<=n;i++)
    {
        col=inf;
        for (int j=1;j<=m;j++)
        {
            scanf("%d",&x);
            col=max(col,Max[j]);
            Max[j]=max(Max[j],x);
            ans=max(ans,col-x);
            col=max(col,x);
        }
    }
    printf("%d",ans);
    return 0;
}

B

T3:奇奇怪怪的数论

这道题的题意并不难理解,就是求x的质数因子是否也都是y的质数因子。

一开始以为gcd(x,y)=x就可以,但是9 12这组数据就会错,所以想到把x分解一下,每个质因子只乘一次,于是就有了这段非常慢非常慢的代码,后来发现如果x是个很大的质数会非常的慢。实际得分:10;

# include <cstdio>
# include <iostream>

using namespace std;

int T;
long long x,y,xx;

long long gcd(long long a,long long b)
{
    return b?gcd(b,a%b):a;
}

int main()
{
    scanf("%d",&T);
    for (int i=1;i<=T;i++)
    {
        scanf("%lld%lld",&x,&y);
        xx=1;
        for (int j=2;x>1;++j)
        {
            if(x%j==0) xx*=j;
            while(x%j==0) x/=j;
        }
        if(gcd(xx,y)==xx) printf("YES\n");
        else            printf("NO\n");
    }
    return 0;
}

C

T4:

本题花的时间最多,也是错的最惨的。

手画一下样例感觉像是求最长下降子序列的长度,事实上也是,因为数据范围比较大,必须写二分的NlogN做法,然而这个做法我非常不熟练,从开始想加上写写调调,拍了1300多组都没出错,差不多用了一个多小时,交上去后发了一张密码条“YES or Yes”。emmmm啊,Yes和No打成大写了。。。。改了这个就A了,然而现在是0分。

# include <cstdio>
# include <iostream>
# include <cstring>

using namespace std;

const int maxn=100001;
int mid,l,r,j,T,n,k,ans,len;
long long a[maxn],d[maxn];

int Find(int x)
{
    l=0;
    r=len;
    while (l<r)
    {
        mid=(l+r)>>1;
        if(d[mid]>x)
          l=mid+1;
        else
          r=mid;
    }
    return l;
}

int main()
{
    scanf("%d",&T);
    while (T)
    {
        scanf("%d%d",&n,&k);
        for (int i=1;i<=n;i++)
            scanf("%lld",&a[i]);
        memset(d,-1000000001,sizeof(d));
        len=1;
        for (int i=1;i<=n;i++)
        {
            if(a[i]<d[len]) d[++len]=a[i];
            else
            {
                j=Find(a[i]);
                d[j]=a[i];
            }
        }
        if(len>=k) printf("No\n");
        else      printf("Yes\n");
        T--;
    }
    return 0;
}

D

T5:

这道题要用到spj,然而spj听说并没有写出来,所以这道题就没做。

T6:找众数

出现次数超过一半的众数,卡内存;

如果两个数不一样,都删掉就好啦,剩下的就是那个众数,得了70,不知道为啥。。。赛后到luogu交了一次A了。

# include <cstdio>
# include <iostream>

using namespace std;

int use,n;
long long x,ans=0;

int main()
{
    scanf("%d",&n);
    while (n)
    {
        scanf("%d",&x);
        if(ans==0) ans=x;
        if(x==ans) use++;
        if(x!=ans)
        {
            use--;
            if(use==0) ans=0;
        }
        n--;
    }
    printf("%d",ans);
    return 0;
}

F

一些想法:这次考试太粗心了,也可能是烧糊涂了,想得到的想不到的错误全犯了一遍,各种错误失的分加起来比实际得的分都多。以后一定要注意不能犯这种错误啊。。。

原文地址:https://www.cnblogs.com/shzr/p/9093075.html

时间: 2024-11-06 10:44:40

学姐学长们的测试的相关文章

学长学姐们的测试-2

  学长学姐们觉得出测试题很有趣呢!于是刚刚返校的我们就又迎来了一次测试.  考试难度:队列:出题人:Cansult,Slr,Milky-way.  当然这个难度是不用信的,因为它并不靠谱... T1:宽嫂的小裙子 题意概述:Cansult得到了一块m*n的布,要把它裁成一个个正方形做裙子,还要对每一块剪开的布进行锁边(只锁一边就可以),最小化这个代价. 看起来像个贪心,事实上也是,每次按照最大的裁,裁到裁完为止...然后我就爆0啦!因为没开longlong,果然一个中考过去什么都忘了...  

【51CTO学院三周年】我和老师和学长学姐们不得不说的故事

事情从2014年的某一天说起,不小心认识了三个字互联网,让我对这个世界有了新的看法,直至现在我成为互联网行业中的一员,我觉得一切都是缘分吧,在接触的过程中,认识一群我都不知道他们再干什么的,他们是做什么的朋友,在他们的介绍下,明白了程序,编程,计算机,等等,慢慢的才有后面的故事.... 在和朋友们的接触过程中,我认识了PHP,JAVA,Html,CSS,js等等,在认识的过程中,我发现了至少目前来说我没有讨厌的事情,编写程序,将现实的世界,写进一行一行的代码中.作为一个小白很明白在学习的过程中是

Vijos1901 学姐的钱包

描述 学姐每次出门逛街都要带恰好M元钱, 不过她今天却忘记带钱包了.可怜的doc只好自己凑钱给学姐, 但是他口袋里只有一元钱.好在doc的N位朋友们都特别有钱, 他们答应与doc作一些交换.其中第i位朋友说:如果doc有不少于Ri元钱,doc可以把手上所有的钱都给这位朋友,并从这位朋友手中换回Vi元钱,但是这次交换会浪费Ti的时间.doc希望可以在最短的时间内换到M元钱(其实是可以大于M的, 因为doc可以存私房钱呢), 否则学姐会生气的! 格式 输入格式 输入数据第一行给定T, 表示总的询问次

2014.11.12模拟赛【美妙的数字】| vijos1904学姐的幸运数字

美妙的数字(number.c/.cpp/.pas) 题目描述 黄巨大认为非负整数是美妙的,并且它的数值越小就越美妙.当然0是最美妙的啦. 现在他得到一串非负整数,对于每个数都可以选择先对它做二进制非运算(模二意义下0.1互换,注意前导0也要交换),然后在任意相邻的两个数之间插入二进制与.二进制或,或者二进制异或.现在他想知道这样计算完产生的最美妙的数字是多少. 一共T组数据.对于每组数据,第一行一个n,表示这组数据中一串数有多少个.下面n个非负整数,表示这串数. 样例输入 2 2 3 6 3 1

卿学姐与魔法(优先队列)

个人心得:思路很简单,不过就是会超时,而且直接用数组的话肯定不够大. 所以就用优先队列,让里面只装N个数就好了,然后再次添加时进行比较,比他小就放进去. 不过这样超时,所以先将A,B排序,然后只要比队首大就break就可以过了. 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<string> 5 #include<queue> 6 #include<

A - 卿学姐与公主(线段树+单点更新+区间极值)

A - 卿学姐与公主 Time Limit: 2000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submit Status 某日,百无聊赖的卿学姐打开了某11区的某魔幻游戏 在这个魔幻的游戏里,生活着一个美丽的公主,但现在公主被关押在了魔王的城堡中. 英勇的卿学姐拔出利刃冲向了拯救公主的道路. 走过了荒野,翻越了高山,跨过了大洋,卿学姐来到了魔王的第一道城关. 在这个城关面前的是魔王的精锐部队,这些士兵

qwb与学姐 (带秩并查集)

qwb与学姐 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 149  Solved: 54[Submit][Status][Web Board] Description qwb打算向学姐表白,可是学姐已经受够了他的骚扰,于是出了一个题想难住他:已知一幅n个点m条边的无向图,定义路径的值为这条路径上最短的边的长度,现在有 k个询问,询问从A点到B点的所有路径的值的最大值.qwb听完这个问题很绝望啊,聪明的你能帮帮他吗? Input 一组数据.第一行三

vijosP1903学姐的实习工资

描述 学姐去实习了, 一共实习了N天, 每一天都可以得到实习工资V[i], 这里V[1..N]被看作是整数序列.因为学姐很厉害, 所以V[1..N]是不下降的.也就是说学姐每天的工资只会越来越多, 不会变少.然而遗憾的是, 偷懒的学姐只记下来了其中M天的收入.第A[1]天获得了的工资为B[1].第A[2]天获得了的工资为B[2].第A[3]天获得了的工资为B[3]....第A[M]天获得了的工资为B[M].其中A[]是递增的.好在她记下来了第一天和第N天的收入. 也就是说A[1]=1, A[M]

qwb与学姐

qwb与学姐 Time Limit: 1 Sec  Memory Limit: 128 MB Description qwb打算向学姐表白,可是学姐已经受够了他的骚扰,于是出了一个题想难住他:已知一幅n个点m条边的无向图,定义路径的值为这条路径上最短的边的长度,现在有 k个询问,询问从A点到B点的所有路径的值的最大值.qwb听完这个问题很绝望啊,聪明的你能帮帮他吗? Input 一组数据.第一行三个整数n,m,k (1<=N<=50000,m<=200000,k<=100000).