10.25 套路化考试

李师傅姿势太好让我好好膜膜怎么写70分暴力
这里写图片描述
都是套路题,想法题,想到了只要三分钟十几行就写好了,想不到一辈子都GG,于是我光荣地写大暴力,反正姿势比jlh要好一点拿了40分。

还有就是莫名其妙升紫了。

题解部分

T1
传说中的找规律,据说是可行的方案只出现在一段区间,并且0不会一起出现,如下表
这里写图片描述

是不是根本看不懂发生了什么?我也不知道发生了什么。。。反正就是根本不可能知道规律的呀。。。。

然后假装你已经知道了规律是怎么样的,只要枚举第一个串,处理第二个串的可行方案就好了。

代码如下:

//orz orz rng_58
#pragma GCC optimize ("O2")
#include <bits/stdc++.h>
#define M 1000010
using namespace std;
int n,m,i,j,k;char a[M],b[M];
int c[200][200];long long ans;
int main(){
    for(scanf("%s%s",a,b),n=strlen(a),m=strlen(b),j=1,i=0;i<n&&k<j;i++){
        for(;a[i]!=b[j-1]&&j<m;) c[b[j-1]][b[j]]++,j++;
        ans+=(i==0||a[i]==a[i-1])?(j-k):(j-k-c[a[i]][a[i-1]]);
        if(a[i]==b[k]){
            if(j>k+1) c[b[k]][b[k+1]]--;k++;
        }if(j<m){
            if(j>k) c[b[j-1]][b[j]]++;j++;
        }
    }return cout<<ans<<endl,0;
}

T2
如果你仔细运算过了的话,你就会惊讶的发现一个很神奇的规律,就是区间长度(r-l)相同的是可以互相算出来的,所以你只要枚举所给区间要求的右边,然后求一下gcd,然后算一算,十几行就好了。

代码如下:

//orz orz rng_58
#pragma GCC optimize ("O2")
#include <bits/stdc++.h>
#define M 100010
using namespace std;
int n,m,i,j,x,t,tot;
int a[M];long long ans;
inline int gcd(int x,int y){
    if(x<y) swap(x,y);
    if(!y) return x;
    return gcd(y,x%y);
}
int main(){
    for(scanf("%d%d",&n,&m),i=1;i<=n;i++)
        scanf("%d",&x),t=gcd(t,x-1);
    for(i=1;i*i<t;i++)
        if(t%i==0) a[++tot]=i,a[++tot]=t/i;
    if(i*i==t) a[++tot]=i;
    for(i=1;i<=tot;i++) if(a[i]%2)
        for(j=a[i];j<=m;j*=2) ans+=m-j;
    return cout<<ans<<endl,0;
}

刚开始gcd里return gcd(y,x%y);
写成了return(y,x%y);
WA掉了,但居然过了一个点。。。。

T3
太难了,不会。。。。据说先是打表找规律,然后DP,
反正我不会。。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值