首页 > 代码库 > codeforces 716

codeforces 716

A n个数 m  递增的 如果2个数的差大于m  那么前面的字就会消失 问最后有几个字

从后往前走一下 

技术分享
#include<stdio.h>
#include<algorithm>
#include<stdlib.h>
#include<cstring>
#include<iostream>
#include<string>
#include<cmath>
#include<vector>
#include<queue>
#include<map>
#include<iterator>
#include<stack>

using namespace std;

#define ll   __int64
#define MAXN  1010010
#define inf  2000000007
#define mod 1000000007

int z[MAXN];

int main()
{
    int n,k;
    scanf("%d%d",&n,&k);
    for(int i=1;i<=n;i++)
        scanf("%d",&z[i]);
    int cnt=1;
    for(int i=n-1;i>=1;i--)
    {
        if(z[i+1]-z[i]<=k)
            cnt++;
        else
            break;
    }
    printf("%d\n",cnt);
    return 0;
}
View Code

B 问子串中是否有26个正好是26个字母的

没有就-1   暴力

技术分享
#include<stdio.h>
#include<algorithm>
#include<stdlib.h>
#include<cstring>
#include<iostream>
#include<string>
#include<cmath>
#include<vector>
#include<queue>
#include<map>
#include<iterator>
#include<stack>

using namespace std;

#define ll   __int64
#define MAXN  1010010
#define inf  2000000007
#define mod 1000000007

char z[MAXN];
int vis[27];

int main()
{
    scanf("%s",z);
    int len=strlen(z);
    int ok=0;
    for(int i=0;i<len-25;i++)
    {
        for(int j=0;j<27;j++)
            vis[j]=0;
        for(int j=i;j<i+26;j++)
        {
            if(z[j]!=?)
             vis[z[j]-A]++;
        }
        int ok1=0;
        int cnt=0;
        for(int j=0;j<26;j++)
        {
             if(vis[j]>1)
                ok1=1;
        }
       // printf("%d ",ok1);
        if(ok1==1)
            continue;
        for(int j=i;j<i+26;j++)
        {
            if(z[j]==?)
            {
                int k;
                for(k=0;k<26;k++)
                    if(vis[k]==0)
                        break;
                z[j]=A+k;
                vis[k]=1;
            }
            ok=1;
        }
        if(ok==1)
            break;
    }
    if(ok==1)
    {
        for(int i=0;i<len;i++)
            if(z[i]==?)
                z[i]=A;
    }
        if(ok==1)
            printf("%s",z);
        else
            printf("-1\n");
    return 0;
}
View Code

C 构造序列

很烂

最后   p*n + q*n =  k *k*(n+1)*(n+1)

        k  可以是n   然后一直推上去     难受 

技术分享
#include<stdio.h>
#include<algorithm>
#include<stdlib.h>
#include<cstring>
#include<iostream>
#include<string>
#include<cmath>
#include<vector>
#include<queue>
#include<map>
#include<iterator>
#include<stack>

using namespace std;

#define ll   __int64
#define MAXN  1010010
#define inf  2000000007
#define mod 1000000007

ll z[MAXN],ans[MAXN];

int main()
{
    ll n;
    scanf("%I64d",&n);
    ans[1]=2;
    for(ll i=2;i<=n;i++)
        ans[i]=i*(i+1)*(i+1)-(i-1);
    for(int i=1;i<=n;i++)
        printf("%I64d\n",ans[i]);

    return 0;
}
View Code

 

codeforces 716