P3794 签到题IV

题目

P3794 签到题IV
来切道水题放松一下吧

做法

或是单调不下降的,\(gcd\)是单调不上升的

\(a_i≤5×10^5\)分成权值不同的块数应该很小,所以随便乱搞就出来了

My complete code

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const LL maxn=1e6;
LL t1,t2,n,k,ans;
LL a[maxn],q1[maxn],q2[maxn],num1[maxn],num2[maxn],q[maxn],num[maxn];
LL Gcd(LL x,LL y){
    while(y){
        LL tmp(y);
        y=x%y,x=tmp;
    }return x;
}
inline void Update1(LL x){
    for(LL i=1;i<=t1;++i) q1[i]=Gcd(q1[i],x);
    q1[++t1]=x,num1[t1]=1;
    LL cnt(0);
    for(LL i=1;i<=t1;++i)
        if(i==1 || q1[i]!=q[cnt]) q[++cnt]=q1[i],num[cnt]=num1[i];
        else num[cnt]+=num1[i];
    t1=cnt;
    for(LL i=1;i<=t1;++i) q1[i]=q[i],num1[i]=num[i];
}
inline void Update2(LL x){
    for(LL i=1;i<=t2;++i) q2[i]|=x;
    q2[++t2]=x,num2[t2]=1;
    LL cnt(0);
    for(LL i=1;i<=t2;++i)
        if(i==1 || q2[i]!=q[cnt]) q[++cnt]=q2[i],num[cnt]=num2[i];
        else num[cnt]+=num2[i];
    t2=cnt;
    for(LL i=1;i<=t2;++i) q2[i]=q[i],num2[i]=num[i];
}
inline void Solve(){
    LL i(1),j(1),na(num1[1]),nb(num2[1]);
    while(i<=t1){
        LL d(min(na,nb));
        if((q1[i]^q2[j])==k) ans+=d;
        na-=d,nb-=d;
        if(!na) na=num1[++i];
        if(!nb) nb=num2[++j];
    }
}
int main(){
    cin>>n>>k;
    for(LL i=1;i<=n;++i){
        cin>>a[i];
        Update1(a[i]),Update2(a[i]);
        Solve();
    }
    cout<<ans;
    return 0;
}

转载于:https://www.cnblogs.com/y2823774827y/p/10351496.html

### 关于签到的定义 签到通常是指一种简单的问或任务,用于测试用户的参与度或者验证其基本能力。这类目一般难度较低,旨在让用户快速完成并获得一定的奖励(例如积分、徽章或其他形式的认可)。在编程领域中,签到可能涉及一些基础算法的应用或简单的逻辑操作。 #### 编程中的签到示例 以下是几个常见的签到示例: 1. **打印特定字符串** 这是最经典的入门级签到之一,要求用户编写程序来输出指定的内容。 ```python print("Hello, World!") ``` 2. **求两个数之和** 用户需要输入两个整数,并计算它们的总和。 ```python a = int(input()) b = int(input()) print(a + b) ``` 3. **判断奇偶性** 给定一个整数,判断它是奇数还是偶数。 ```python num = int(input()) if num % 2 == 0: print("Even") else: print("Odd") ``` 4. **模拟自动签到功能** 结合引用内容[^1],可以设计一个简单的每日签到脚本,该脚本分为两部分:调度代码和签到逻辑。 ```python import datetime def auto_sign_in(): today = datetime.date.today() print(f"User signed in on {today}") # 调度部分:每天运行一次 auto_sign_in() ``` 5. **连续签到天数统计** 参考引用[^4],可以在ThinkPHP框架下实现连续签到的功能。假设有一个MySQL表`sign_log`记录每次签到的时间戳,则可以通过查询最近一条记录并与当前日期对比,更新连续签到天数。 ```sql SELECT DATEDIFF(CURDATE(), MAX(sign_date)) AS days_diff FROM sign_log WHERE user_id = ? ``` --- ### 签到的意义与应用场景 签到不仅限于编程竞赛或学习平台,在实际项目开发中也有广泛应用。例如,通过设置每日签到机制鼓励用户持续访问应用;利用签到数据挖掘用户行为模式等。此外,某些场景还结合了机器学习技术,比如手写签名识别任务[^3],其中涉及到特征提取与相似度比较的过程。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值