0
点赞
收藏
分享

微信扫一扫

牛客练习赛53


题号

标题

已通过代码

题解

讨论

通过率

我的状态

A

超越学姐爱字符串

点击查看

进入题解

进入讨论

798/1844

 通过

B

美味果冻

点击查看

进入题解

进入讨论

245/1119

未通过

C

富豪凯匹配串

点击查看

进入题解

进入讨论

262/884

通过

D

德育分博弈政治课

点击查看

进入题解

进入讨论

88/407

未通过

E

老瞎眼 pk 小鲜肉

点击查看

进入题解

进入讨论

182/593

未通过

F

柳下惠的数学题

点击查看

进入题解

进入讨论

13/37

未通过

 

A

链接:https://ac.nowcoder.com/acm/contest/1114/A 来源:牛客网
 

时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 524288K,其他语言1048576K
64bit IO Format: %lld

题目描述

超越学姐非常喜欢自己的名字,以至于英文字母她只喜欢“c”和“y”。因此超越学姐喜欢只含有“c”和“y”的字符串,且字符串中不能出现两个连续的“c”。请你求出有多少种长度为n的字符串是超越学姐喜欢的字符串。答案对1e9+7取模。

输入描述:

输入一个整数n。
1<=n<=100000

输出描述:

输出一个整数表示答案。

示例1

输入

复制

3

输出

复制

5

说明

cyy,cyc,yyy,yyc,ycy

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstdio>
#define ll long long
using namespace std;
const ll mod=1e9+7;
const int maxn=100000;
ll ans[maxn];
int main()
{
    int n;
    scanf("%d",&n);
    ans[1]=2,ans[2]=3;
    for(int i=3;i<=n;i++)
    {
        ans[i]=(ans[i-1]%mod+ans[i-2]%mod)%mod;
    }
    printf("%lld\n",ans[n]%mod);
}

B

牛客练习赛53_字符串

 

OJ题号

美味果冻

https://ac.nowcoder.com/acm/contest/1114/B

简单题意

求该式子

牛客练习赛53_i++_02

正解思路

牛客练习赛53_#include_03

交换一下确实没想出来,但是该打一下表的

牛客练习赛53_字符串_04

打表真好

详细链接

#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int mod=1e9+7;
const int maxn=3e6+10;
int p[maxn];
int main()
{
    for(int i=0;i<maxn;i++)
        p[i]=1;
    int n;cin>>n;
    int ans=0;
    for(int j=1;j<=n;j++)
    {
        int limit=n/j,l=j,r=j+j-1;
        for(int i=1;i<limit;i++)
        {
            p[i]=1LL*p[i]*i%mod;
            ans=ans+1LL*(l+r)*j/2%mod*p[i]%mod;
            ans%=mod;
            l+=j,r+=j;
        }
        p[limit]=1LL*p[limit]*limit%mod;
        ans=ans+1LL*(l+n)*(n-l+1)/2%mod*p[limit]%mod;
        ans%=mod;
    }
    cout<<ans<<endl;
    return 0;
}

C

链接:https://ac.nowcoder.com/acm/contest/1114/C 来源:牛客网
 

时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 524288K,其他语言1048576K
64bit IO Format: %lld

题目描述

有n个长度为m的文本串,每个串只含有'0'和'1'。接下来有Q次询问,每次给出一个长度为m的字符串,且只含有'0','1'和'_'。如10_1_1。下划线可以匹配'0'或'1'。即10_1_1可以匹配101111,101101,100111,100101四种串。每次询问求出n个文本串中有多少个可以与当前询问的串匹配。

输入描述:

第一行输入n,m
接下来n行,每行输入一个长度为m的01串表示一个文本串。
第n+2行输入Q
接下来Q行,每行输入一个长度为m的字符串(只包含'0','1','_')。
1<=n,m<=1000,1<=Q<=3000。

输出描述:

对于每次询问,输出n个文本串中有多少个与当前询问的串匹配。

示例1

输入

复制

5 6
101101
011011
100110
111000
101111
2
1011_1
1__1__

输出

复制

2
3

说明

第一次询问:有101101,101111与1011_1匹配
第二次询问:有101101,   100110,   101111与1__1__匹配

 

35.

OJ题号

富豪凯匹配串

https://ac.nowcoder.com/acm/contest/1114/C

简单题意

有n个长度为m的文本串,每个串只含有'0'和'1'。接下来有Q次询问,每次给出一个长度为m的字符串,且只含有'0','1'和'_'。如10_1_1。下划线可以匹配'0'或'1'。即10_1_1可以匹配101111,101101,100111,100101四种串。每次询问求出n个文本串中有多少个可以与当前询问的串匹配。

正解思路

我们利用&的性质:0&1=0,0&0=0,1&0=0,1&1=1

我们发现对于每一个查询str可以把第i位:_ 看成0(把str转化为s),s[i]&a[i]的匹配目标为t[i],t[i]=0

str可以把第i位:1看成1(把str转化为s),s[i]&a[i]的匹配目标为t[i],t[i]=1

str可以把第i位:0看成1(把str转化为s),s[i]&a[i]的匹配目标为t[i],t[i]=0

 

详细链接

 

#include <bits/stdc++.h>
using namespace std;
#define N 10000+5
typedef long long ll;
bitset<N> a[N],s,t;
char str[N];

int main()
{
	int n,m;
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++)
	{
		 scanf("%s",str);
		 for(int j=0;j<m;j++)
		 {
		 	a[i][j]=str[j]-'0';
		 }
	
	}
	int q;
	scanf("%d",&q);
	for(int i=1;i<=q;i++)
	{
		scanf("%s",str);
		 for(int j=0;j<m;j++)
		 {
		 	if(str[j]=='_')
			{
				s[j]=0;
				t[j]=0;
			}
		 	else
			{
				s[j]=1;
				t[j]=str[j]-'0';
			}
		 }
		                   
		int ans=0;
		for(int j=1;j<=n;j++)
		{
			if((a[j]&s)==t)
				ans++;
		}
		printf("%d\n",ans);
	}
	
	
	
	
    return 0;
}

链接:https://ac.nowcoder.com/acm/contest/1114/E 来源:牛客网
 

时间限制:C/C++ 2秒,其他语言4秒
空间限制:C/C++ 524288K,其他语言1048576K
64bit IO Format: %lld

题目描述

老瞎眼有一个长度为 n 的数组 a,为了为难小鲜肉,他准备了 Q 次询问,每次给出 一个区间[L,R],他让小鲜肉寻 找一对 l,r 使L<=l<=r<=R 且 a[l]^a[l+1]^a[l+2]...^a[r]=0,老瞎眼只让他回答r-l+1 最小是多少,若没有符合条件的 l,r 输出”-1”。 

输入描述:


第一行输入 n,Q。 第二行输入 n 个数,表示 a 数组。 接下来 Q 行,每行输入 L,R。 1<=n,Q<=500000,0<=a[i]<=1000000,1<=L<=R<=n


输出描述:


若有解,输出 r-l+1 最小是多少。 否则输出“-1”。


示例1

输入

复制


4 2 2 1 3 3 1 2 1 3


输出

复制


-1 3


说明


第一次询问无解。 第二次询问: l=1,r=3


 

#include <cstdio>
#include <algorithm>
#define lson rt<<1, l , mid
#define rson rt<<1|1, mid+1 , r
#define INF 0x3f3f3f3f
using namespace std;
typedef long long ll;
const int maxn = 5e5+6;
int n, q;
int pos[maxn<<2], pre[maxn], tree[maxn<<2], ans[maxn];
struct node{
    int l,r,id;
    bool operator<(const node x)const{
        return r<x.r;
    }
}Q[maxn];
void push_up(int rt){
    tree[rt] = min(tree[rt<<1], tree[rt<<1|1]);
}
void update(int rt,int l,int r,int pos,int val){
    if(l==r){
        tree[rt] = min(tree[rt], val);
        return;
    }
    int mid = (l+r)>>1;
    if(pos<=mid) update(lson, pos, val);
    else update(rson, pos, val);
    push_up(rt);
}
int query(int rt, int l, int r, int ul, int ur){
    if(ul<=l&&r<=ur) return tree[rt];
    int mid = (l+r)>>1, ans = INF;
    if(ur<=mid) return query(lson, ul, ur);
    else if(ul>mid) return query(rson, ul, ur);
    else return min(query(lson, ul, ur),query(rson, ul, ur));
}
/*这种写法也可以,但是就我以前做过的一道题目来说上面那种更快(不知道为啥,还有待考证)
int query(int rt, int l, int r, int ul, int ur){
    if(ul<=l&&r<=ur) return tree[rt];
    int mid = (l+r)>>1, ans = INF;
    if(ul<=mid) ans = min(ans, query(lson, ul, ur));
    if(ur>mid) ans = min(ans, query(rson, ul, ur));
    return ans;
}
*/
int main(){
    scanf("%d%d", &n, &q);
    for(int i = 1;i <= 4*500000; i++){
        pos[i] = -1;
        tree[i] = INF;
    }
    int sum = 0; pos[0] = 0;
    for(int i = 1,x; i <= n; i++){
        scanf("%d",&x);
        sum ^= x;
        if(pos[sum]!=-1)
            pre[i]=pos[sum]+1;
        else
            pre[i]=-1;
        pos[sum]=i;
    }
    for(int i = 1; i <= q; i++){
        scanf("%d%d", &Q[i].l, &Q[i].r);
        Q[i].id = i;
    }
    sort(Q+1, Q+1+q);
    int cnt = 1;
    
    for(int i=1;i<=n;i++)
    {
        if(pre[i]!=-1)
        {
            update(1,1,n,pre[i],i-pre[i]+1);
        }
        while(i==Q[cnt].r)
        {
            ans[Q[cnt].id]=query(1,1,n,Q[cnt].l,Q[cnt].r);
            cnt++;
        }
    }
   
    for(int i = 1; i <= q; i++){
        printf("%d\n", ans[i]==INF?-1:ans[i]);
    }
    return 0;
}

 

举报

相关推荐

0 条评论