CCF- CSP 202012-5星际旅行 80分骗分题解

CCF- CSP 202012-5星际旅行 80分骗分题解

题目链接:202012-5星际旅行

思路:

  • 题目条理比较清晰,对于这种第五题,我们在考试时尽可能拿更多的分(第5题拿满分我不敢奢望hhhh),在此只提出一些应该注意的小细节
  • 数据类型采用unsigned long long数据范围比long long更大,如果只采用long long 最后只有70分
  • 多次采用取模运算,在操作2乘法计算完后,进行取模操作,否则只有20分
  • 在操作4后,求得指定区间内的坐标和后,进行取模运算
  • 在计算平方和时:1.计算完单一坐标的平方后取模,2.计算完所有的坐标的平方和后取模

具体代码:

#include<iostream>
#include<algorithm>
using namespace std;
typedef unsigned long long ULL;
const ULL N = 1e5+10,mod = 1e9+7;
ULL n,m;
struct node{
    ULL x,y,z;
}node[N];
int main()
{
    cin>>n>>m;
    while(m--)
    {
        ULL x;
        cin>>x;
        if(x==1)
        {
            ULL l,r,a,b,c;
            cin>>l>>r>>a>>b>>c;
            for(ULL i=l;i<=r;i++)
            {
                node[i].x+=a;
                node[i].y+=b;
                node[i].z+=c;
            }
        }
        else if(x==2)
        {
            ULL l,r,k;
            cin>>l>>r>>k;
            for(ULL i=l;i<=r;i++)
            {
                node[i].x*=k;
                node[i].x = node[i].x%mod;
                node[i].y*=k;
                node[i].y = node[i].y%mod;
                node[i].z*=k;
                node[i].z = node[i].z%mod;
            }
        }
        else if(x==3)
        {
            ULL l,r;
            cin>>l>>r;
            for(ULL i=l;i<=r;i++)
            {
                ULL x_ = node[i].x;
                ULL y_ = node[i].y;
                ULL z_ = node[i].z;
                node[i].x = y_;
                node[i].y = z_;
                node[i].z = x_;
            }
        }
        else if(x==4)
        {
            ULL l,r;
            cin>>l>>r;
            ULL x_ = 0,y_ = 0,z_ = 0;
            for(ULL i=l;i<=r;i++)
            {
                x_+=node[i].x;
                y_+=node[i].y;
                z_+=node[i].z;
            }
            x_ = x_%mod;
            y_ = y_%mod;
            z_ = z_%mod;
            
            ULL s = (x_*x_%mod+y_*y_%mod+z_*z_%mod)%mod;
            cout<<s<<endl;
        }
    }
}
  • 7
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值