0813的个人赛中的 所有题目

ZOJ 3279 ants http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3279

树状数组,你不学就永远不会;

巧妙之处在于 q 处的查找上,采用二分方式+计算前缀和;

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#define mem(a) memset(a, 0, sizeof(a));

const int maxn = 100010;
int c[maxn];
int a[maxn];
int n;

int lowbit(int x)
{
    return x&(-x);
}

int sum(int x)
{
    int cnt=0;
    while(x>0)
    {
        cnt+=c[x];
        x-=lowbit(x);
    }
    return cnt;
}

void add(int x,int d)
{
    while(x<=n)
    {
        c[x]+=d;
        x+=lowbit(x);
    }
}

int main()
{
    while(scanf("%d",&n)!=EOF)
    {
        mem(c);mem(a);
        for(int i=1;i<=n;i++)
        {
            scanf("%d",&a[i]);
            add(i,a[i]);
        }
        int k;char ch;
        scanf("%d",&k);
        for(int i=1;i<=k;i++)
        {
            getchar();
            scanf("%c",&ch);
            if(ch=='p')
            {
                int id,num;
                scanf("%d%d",&id,&num);
                add(id,num-a[id]);
                a[id]=num;
            }
            else if(ch == 'q')
            {
                int r;
                scanf("%d",&r);
                int left_=0;int right_=n;
                while(left_<right_)
                {
                    int m=left_+(right_-left_)/2;
                    if(sum(m)>=r) right_=m;
                    else left_=m+1;
                }
                printf("%d\n",left_);
            }
        }
    }
    return 0;
}
HDU 1005  http://acm.hdu.edu.cn/showproblem.php?pid=1005 明显的 数学

需要先找出其循环,然后就是需要条理一点的细节处理;

判断循环的方式可以很好:可以将其相邻两数字化成十进制数存一下vis,而后判断即可;

#include<cstdio>
#include<cstring>

const int maxn = 100;
int a,b,n;
int f[maxn];
int main()
{
    while(scanf("%d%d%d",&a,&b,&n)!=EOF)
    {
        if(a==0&&b==0&&n==0)
            break;
        memset(f,0,sizeof(f));
        f[1]=1;
        f[2]=1;
        int period;
        int start;
        int ok=0;
        for(int i=3;i<=55;i++)
        {
            f[i]=(a * f[i-1] + b * f[i-2])%7;
            for(int j=2;j<=i-1;j++)
            {
                if(f[i-1]==f[j-1]&&f[i]==f[j])
                {
                    start=j;
                    period=i-j;
                    ok=1;
                    break;
                }
            }
            if(ok) break;
        }

        f[0]=f[start+period];
        int ans;
        if(n>start)
        {
            ans=(n-start)%period;
            printf("%d\n",f[start+ans]);
        }
        else
        {
            ans=n;
            printf("%d\n",f[ans]);
        }
    }
    return 0;
}

还有一道简单模拟,不写;

还有其他一道前面总结过了,就是这样。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
近年来,编程已经成为了一种全球范围内广受欢迎的技能。它作为一种能够独立思考、找到解决方案的工具,不仅被广泛应用在科学、技术和商业领域,也提升了学生的逻辑思维和创造力。Scratch编程比赛便是这种趋势的一种体现。 Scratch编程比赛是一项鼓励青少年热爱编程及培养其创造力和团队合作精神的比赛。参赛者可以用Scratch编程语言开发一款有趣、富有创意的作品,展示自己的创造力和技巧。比赛内容包括动画、游戏、应用程序等多种类型。 参赛者需要有一定的Scratch编程知识和经验,对于初学者而言,可以从Scratch官网上进行学习和实践,也可以参加编程培训班获取更多的技术指导。一旦参赛者克服了其一些挑战,就可以开始构思自己的创意并开始设计和编写程序。 在Scratch编程比赛,除了技术的要求外,团队合作和创意也是非常重要的。参赛者需要彼此配合,充分发挥团队成员的潜力,协作完成作品。除此之外,创意的发掘和创新也是比赛的重点。参赛者可以从日常生活的点滴信息、自己的兴趣爱好以及社会现象找到灵感,将它们变成具有原创性的作品。 总之,Scratch编程比赛是一项充满挑战但又充满乐趣的活动。对于青少年来说,参加比赛可以展现自己的才华,培养个人兴趣和技能,同时也可以提升团队意识和协作能力,是非常值得推荐的一项活动。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值