UOJ Logo No_wonder的博客

博客

题解[骑箱巡游]

2021-01-16 21:06:47 By No_wonder

实际就是非常简单的桶排

#include<bits/stdc++.h>
using namespace std;
int a[1000100];
int main()
{    
    int n;
    scanf("%d",&n);
    for(int i=0;i<n;i++)
    {
    int q;
    scanf("%d",&q);
    a[q]++;    
    }
    for(int i=0;i<1000100;i++)
    {
    if(a[i]==0)continue;
    else 
    {
        printf("%d %d\n",i,a[i]);
        }    
    }
    return 0;
}

AFO

2020-12-09 15:31:25 By No_wonder

NOIP炸了60分,没有明年再来的机会了QAQ

退役记

OI wiki

2020-12-03 18:39:07 By No_wonder

在教学课件的百度云链接恢复之前,大家先用这个网站吧

OI wiki https://oi-wiki.org

赛后题解

2020-12-02 18:43:35 By No_wonder

这场是高一同学们的第一场考试呢 (事先做完题然后两分钟AK的高二的我们都是屑

春来

其实就是问$n$个数的最大公因数$(gcd)$。

方法是这样的,我们考虑三个数的情况,只需要先算前两个数的的$gcd$,然后用这个$gcd$去与第三个数匹配得到的$gcd$就是答案,扩展到n个数,只需要用$gcd$不断递推就可以

我这里提供$gcd$的写法,使用欧几里得算法就可以快速得到答案

#include<bits/stdc++.h>            //万能头,包含了常用的所有头文件
using namespace std;
int Exgcd(int x,int y)            //欧几里得算法,Exgcd真实含义是扩欧,感兴趣的同学可以自行了解 
{
    return y==0?x:Exgcd(y,x%y);    //递归求解 
}
int n,a[100];
int main()
{
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
    scanf("%d",&a[i]);
    int ans=a[1];
    for(int i=2;i<=n;i++)        //前言说的递推 
    ans=Exgcd(ans,a[i]);
    printf("%d",ans);
    return 0;
}

关于Exgcd

彩sai羽毛球

这里介绍一种数据结构,栈。我们想象一个井,我们可以往里扔东西,往出拿东西。那么我们能访问到的就只有最后扔进去的元素(栈顶元素。 我们可以手写一个数组去模拟这个过程,但是我更倾向于使用STL容器

#include<bits/stdc++.h>
#include<stack>
using namespace std;
stack <int>a;                //STL中的栈容器 
int main()
{
    int n;
    scanf("%d",&n);
    for(int i=0;i<n;i++)
    {
    int k;
    scanf("%d",&k);
    if(k==1)
        {
            int c;
            scanf("%d",&c);
            a.push(c);                //进栈 
        }
    if(k==2)
        {
            int c;
            scanf("%d",&c);
            for(int i=0;i<c;i++) 
            a.pop()    ;            //出栈 
        }
    if(k==3)
            printf("%d\n",a.top());    //栈顶元素 
    }

}

关于栈看这里吧

颓我家财

这道题思维难度还是可以的,我也交了三版代码才过(被long long卡了

我们考虑前$n$个数能凑出来最大的钱是$a$(a之前的金额都能凑出来)。面临第$n+1$个数,如果他大于$a+1$,那么我们就遇到了第一个凑不出的金额。所以只需要做一个前缀和就好。

#include<bits/stdc++.h>
#define ri register int
using namespace std;
long long a[100005];
long long n,sum;
int main()
{
    scanf("%lld",&n);
    for(ri i=1;i<=n;i++)
    scanf("%lld",&a[i]);
    for(ri i=1;i<=n;i++)
    {
        if(sum+1<a[i])
        {
            printf("%lld",sum+1);
            return 0;
        }
        sum+=a[i];
    }
    printf("%lld",sum+1);
}

我的blog

学长tql orz %%%

2020-06-24 10:33:55 By No_wonder

太强了太强了!!!!

No_wonder Avatar