西山居 初赛

来源:互联网 发布:手机邮箱软件排行 编辑:程序博客网 时间:2024/05/01 22:05

第一题: 魔法串  水题,贴代码:

#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#include <queue>#include <cmath>#include <stack>#include <map>#include <string>#define LL long long#define DB doubleusing namespace std;const int N = 1009;char a[N],b[N];int v[39][39];vector<int> L[39];queue<int> que;void init(){    memset(v,0,sizeof(v));    for(int i=0;i<26;i++)    {        v[i][i] = 1;        while(!que.empty()) que.pop();        que.push(i);        while(!que.empty())        {            int e = que.front();que.pop();            for(int j=0;j<(int)L[e].size();j++)            {                int to = L[e][j];                if(v[i][to]==0)                {                    v[i][to] = 1;                    //que.push(to);                }            }        }    }}int A[N],B[N];int solve(){    int l1 = strlen(a),l2=strlen(b);    for(int i=0;i<l1;i++) A[i] = a[i]-'a';    for(int j=0;j<l2;j++) B[j] = b[j]-'a';    for(int i=0,j=0;i<l1;i++)    {        int f = 0;        for(;j<l2;)        {            if(v[B[j]][A[i]])            {                j++;                f = 1;break;            }            j++;        }        if(!f) return 0;    }return 1;}int main(){    #ifndef ONLINE_JUDGE    freopen("in.txt","r",stdin);    #endif    int cas,T=1;scanf("%d",&cas);    while(cas--)    {        scanf("%s%s",a,b);        int m;        scanf("%d",&m);        for(int i=0;i<36;i++) L[i].clear();        while(m--)        {            char c1[3],c2[3];            scanf("%s%s",c1,c2);            L[c1[0]-'a'].push_back(c2[0]-'a');        }        init();        printf("Case #%d: %s\n",T++,solve()?"happy":"unhappy");//solve()    }    return 0;}

第二题:比赛难度 随便搞搞,怎么搞都能过.


#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#include <queue>#include <cmath>#include <stack>#include <map>#include <string>#define LL long long#define DB doubleusing namespace std;const int N = 10009;struct nod{    int val1,val2,p;    bool operator<(const nod t) const    {        return val1>t.val1||(val1==t.val1&&val2>t.val2);    }};priority_queue<nod> que;int re[N];int n,m;int solve(){    sort(re,re+n);    re[n] = 0x3f3f3f3f;    nod e,t;    while(!que.empty()) que.pop();    e.p =0;e.val1 = re[0];    e.val2 =0;    que.push(e);    for(int i=1;i<m;i++)    {        e = que.top();que.pop();        int p = e.p +1;        t.p = p;        t.val1 = e.val2+re[p];        t.val2 = e.val2;        que.push(t);        t.val1 = e.val1+re[p];        t.val2 = e.val1;        que.push(t);    }e = que.top();    return e.val1;}int main(){    #ifndef ONLINE_JUDGE    freopen("in.txt","r",stdin);    #endif    int cas,T=1;scanf("%d",&cas);    while(cas--)    {        scanf("%d%d",&n,&m);        for(int i=0;i<n;i++) scanf("%d",&re[i]);        printf("Case #%d: %d\n",T++,solve());    }    return 0;}

第三题:  不会...好伤心..

原创粉丝点击