2016"百度之星" - 资格赛(Astar Round1)

Posted 小小暮雨

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2016"百度之星" - 资格赛(Astar Round1)相关的知识,希望对你有一定的参考价值。

http://acm.hdu.edu.cn/showproblem.php?pid=5685

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int MAXN = 1e5 + 5;
int H[MAXN];
char Hstr[MAXN];
int N, l, r;
const int mods = 9973;
typedef long long LL;

LL mod_pow(LL x, LL n, LL mod) {
    LL res = 1;
    while(n > 0) {
        if(n & 1) res = res * x % mod;
        x = x * x % mod;
        n >>= 1;
    }
    return res;
}


int main(){
    while(~scanf("%d", &N)){
        scanf("%s", Hstr);
        int len = strlen(Hstr);
        H[0] = 1;
        for(int i = 1;i <= len;i ++){
            H[i] = H[i - 1] * (Hstr[i - 1] - 28) % mods;
        }
        while(N --){
            scanf("%d%d", &l, &r);
            if(l > r) swap(l, r);
            printf("%I64d\n", (LL)H[r] * mod_pow(H[l - 1], mods - 2, mods) % mods);
        }
    }
    return 0;
}
/*
#include <stdio.h>
#include <string.h>
char str[100010];
int main()
{
    int n,a,b,k,i,j,s,l;
    while (scanf("%d",&n)!=EOF)
    {
        memset(str,0,sizeof(str));
        scanf("%s",str);
        l = strlen(str);
        //printf("%d\n",l);
        for (k = 0;k<n;k++)
        {
            j = 1;
            scanf("%d %d",&a,&b);
            for (i = a-1;i < b;i++)
                printf("%d,",str[i]);
            printf("\n");
            for (i = a-1;i < b;i++)
            {
                j = (str[i]-28) % 9973*j;
            }
            j = j % 9973;
            printf("%d\n",j);
        }
        
    }
    return 0;
}
*/

 

http://acm.hdu.edu.cn/showproblem.php?pid=5686

#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;
int a[205][205];
int main()
{
    memset(a,0,sizeof(a));
    a[1][200]=1;a[2][200]=2;
    int i,j;
    for(i=3;i<=200;i++)
    {
        for(j=200;j>0;j--)
        {
            a[i][j]=a[i][j]+a[i-1][j]+a[i-2][j];
            if(a[i][j]>9)
            {
                a[i][j-1]=a[i][j]/10;
                a[i][j]=a[i][j]%10;
            }
        }
    }
    int n;
    while(cin>>n)
    {
        j=0;
        while(a[n][j]==0)j++;
        for(;j<=200;j++)
        {
            cout<<a[n][j];
        }
        cout<<endl;
    }
    return  0;
}

 

http://acm.hdu.edu.cn/showproblem.php?pid=5687

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;

#define FIN freopen("input.txt","r", stdin)

struct node{
    int next[27];
    int v,s;
    void init(){
        v=s=0;
        memset(next,-1,sizeof(next));
    }
};
struct node L[4000000];
int tot=0;

void add(char a[],int len){
    int now=0;
    for(int i=0;i<len;i++){
        int tmp=a[i]-a;
        int next=L[now].next[tmp];
        if(next==-1){
            next=++tot;
            L[next].init();
            L[next].v=-1;
            L[now].next[tmp]=next;
        }
        now=next;
        L[now].s ++;
    }
    L[now].v=0;
}

bool query(char a[],int len){
    int now=0;
    for(int i=0;i<len;i++){
        int tmp=a[i]-a;
        int next=L[now].next[tmp];
        if(next==-1)return false;
        now=next;
    }
    return L[now].s > 0;
}

void deletes(char a[], int len){
    int now=0, late;
    for(int i=0;i<len;i++){
        int tmp=a[i]-a;
        int next=L[now].next[tmp];
        if(next==-1) return;
        late = now;
        now=next;
    }
    now = 0;
    for(int i=0;i<len;i++){
        int tmp=a[i]-a;
        int next=L[now].next[tmp];
        if(next==-1) return;
        late = now;
        now=next;
        L[now].s --;
    }
    L[now].init();
    int tmp=a[len - 1]-a;
    L[late].next[tmp] = -1;
}

char S1[15];
char S2[35];
int N;
int main(){
    //FIN;
    L[0].init();
    scanf("%d", &N);
    while(N --){
        scanf("%s%s", S1, S2);
        if(S1[0] == i || S1[0] == I) add(S2, strlen(S2));
        else if(S1[0] == s || S1[0] == S){
            bool v = query(S2, strlen(S2));
            if(v){
                printf("Yes\n");
            }
            else{
                printf("No\n");
            }
        }
        else{
            deletes(S2, strlen(S2));
        }
    }
    return 0;
}


 

http://acm.hdu.edu.cn/showproblem.php?pid=5688

 

#include <cstdio>
#include <cstring>
#include <map>
#include <string>
#include <algorithm>
using namespace std;
#define FIN freopen("input.txt","r", stdin)
int N;
char tstr[40 + 5];
map<string, int>TM;
int main(){
    //FIN;
    TM.clear();
    scanf("%d", &N);
    for(int i = 0;i < N;i ++){
        scanf("%s", tstr);
        sort(tstr, tstr + strlen(tstr));
        if(!TM[string(tstr)]) TM[string(tstr)] = 0;
        printf("%d\n", TM[string(tstr)]);
        TM[string(tstr)] ++;
    }

    return 0;
}

 

以上是关于2016"百度之星" - 资格赛(Astar Round1)的主要内容,如果未能解决你的问题,请参考以下文章

2016"百度之星" - 资格赛(Astar Round1)

hdu 5685 Problem A(2016"百度之星" - 资格赛(Astar Round1)——线段树)

[HDU5687]2016"百度之星" - 资格赛 Problem C

[HDU5686]2016"百度之星" - 资格赛 Problem B

[HDU5688]2016"百度之星" - 资格赛 Problem D

[HDU5685]2016"百度之星" - 资格赛 Problem A