zoukankan      html  css  js  c++  java
  • 17.10.24 数据最水的一次考试

    A + 35 + 0

     

    总结:

    总的来说这次考试的测试数据有点垃lj,

    T1 n <= 1e5, 然而n ^ 2都是可以过的

    T2 感觉 k 就是个lj,没有啥用,首先对于k=1的情况,可以枚举每条q边

    即使直接跑最短路也可以过 60%,对于最后30%,实际数据k >= n,然而没仔细看(理解)数据范围。

    数组开小了,丢了40‘;

    T3 难。

    1.每道题都要看数据范围,看看有没有好骗分的lj数据

    2.不要开不够数组!!!!!!!!!!!!!!!!!!!!!!!!
    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

    题目描述

    现在有一个字符串,每个字母出现的次数均为偶数。接下来我们把第一次出现的字母a和第二次出现的a连一条线,第三次出现的和四次出现的字母a连一条线,第五次出现的和六次出现的字母a连一条线...对其他25个字母也做同样的操作。

    现在我们想知道有多少对连线交叉。交叉的定义为一个连线的端点在另外一个连线的内部,另外一个端点在外部。

    下图是一个例子,共有三对连线交叉(我们连线的时候,只能从字符串上方经过)。

     

    输入格式

    一行一个字符串。保证字符串均由小写字母组成,且每个字母出现次数为偶数次。

    输出格式

    一个整数,表示答案。

    样例输入

    abaazooabz

    样例输出

    3

    数据范围

    对于30% 的数据,字符串长度不超过50。

    对于100% 的数据,字符串长度不超过100,000。

    #include <iostream>
    #include <cstdio>
    #include <algorithm>
    #include <cmath>
    #include <cstring>
    #include <string>
    
    using namespace std;
    const int N = 1e5 + 10;
    
    string s;
    int a[N], l[N], r[N], bel[N], last[N];
    int len;
     long long answer;
    
    int main()
    {
        freopen("cross.in","r",stdin);
        freopen("cross.out","w",stdout);
        cin >> s;
        int len = s.length();
        for(int i = 0; i < len; i ++)
            a[i + 1] = s[i] - 'a' + 1;
        for(int i = 1; i <= len; i ++)//yi i wei duan dian// 0 -> zuo,  1 ->  you
            if(last[a[i]])
                l[i] = last[a[i]], r[last[a[i]]] = i, last[a[i]] = 0, bel[i] = 1;
            else
                last[a[i]] = i, bel[i] = 0;
        for(int i = 1; i <= 26; i ++)
            for(int j = 1; j <= len; j ++)
                if(a[j] == i && bel[j] == 0){
                    int k = j + 1;
                    while(a[k] != a[j]){
                        if(bel[k] == 1 && l[k] < j) answer ++;
                        k ++;
                    }
                    j = k;
                }
        printf("%lld", answer);
        return 0;
    } 
    /*
    abaazooabz
    3
    */

    跳跳虎回家

    #include <iostream>
    #include <cstdio>
    #include <algorithm>
    #include <cmath>
    #include <cstring>
    #include <string>
    #include <queue>
    #include <cstdlib>
    
    using namespace std;
    const int N = 5010;
    const int oo = 99999999;
    const int la = 2005;
    
    int n, m, q, k, now = 1;
    int u2[la], v2[la], w2[la];
    int head[N], dis[N], dis_2[N], pre[N], is_q[N][N], cha[N];
    bool vis[N];
    struct Node{
        int u, v, w, nxt;
    };
    Node E[N << 2];
    queue <int> Q;
    
    struct T2{
        inline int read(){
            int x = 0;
            char c = getchar();
            while(c < '0' || c > '9') c = getchar();
            while(c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();
            return x;
        }
        inline void add(int u, int v, int w){
            E[now].v = v;
            E[now].w = w;
            E[now].nxt = head[u];
            head[u] = now ++;
            return ;
        }
        inline int spfa_1(int start, int endd){
            for(int i = 1; i <= n; i ++)
                dis[i] = oo, vis[i] = 0;
            dis[start] = 0;
            vis[start] = 1;
            Q.push(start);
            while(!Q.empty()){
                int topp = Q.front();
                Q.pop();
                vis[topp] = 0;
                for(int i = head[topp]; ~ i; i = E[i].nxt){
                    if(dis[E[i].v] > dis[topp] + E[i].w){
                        dis[E[i].v] = dis[topp] + E[i].w;
                        if(!vis[E[i].v]){
                            Q.push(E[i].v);
                            vis[E[i].v] = 1;
                        }
                    }
                }
            }
            return dis[endd];
        }
        inline int spfa_2(int start, int endd){
            for(int i = 1; i <= n; i ++)
                dis[i] = oo, vis[i] = 0;
            dis[start] = 0;
            vis[start] = 1;
            Q.push(start);
            while(!Q.empty()){
                int topp = Q.front();
                Q.pop();
                vis[topp] = 0;
                for(int i = head[topp]; ~ i; i = E[i].nxt){
                    if(dis[E[i].v] > dis[topp] + E[i].w && !is_q[topp][E[i].v]){
                        dis[E[i].v] = dis[topp] + E[i].w;
                        if(!vis[E[i].v]){
                            Q.push(E[i].v);
                            vis[E[i].v] = 1;
                        }
                    }
                }
            }
            return dis[endd];
        }
    } t2;
    
    
    int main(int argc, char *argv[]){
        //freopen("move.in","r",stdin);
        //freopen("move.out","w",stdout);
        n = t2.read();
        m = t2.read();
        q = t2.read();
        k = t2.read();
        for(int i = 1; i <= n; i ++)
            head[i] = -1;
        for(int i = 1; i <= m; i ++){
            int u = t2.read();
            int v = t2.read();
            int w = t2.read();
            t2.add(u, v, w);
        }
        if(k == 0){
            int ans_1 = t2.spfa_1(1, n);
            printf("%d", ans_1 == oo ? -1 : ans_1);
            return 0;
        }
        for(int i = 1; i <= q; i ++){
            u2[i] = t2.read();
            v2[i] = t2.read();
            w2[i] = t2.read();
            is_q[u2[i]][v2[i]] = 1;
            t2.add(u2[i], v2[i], w2[i]);
        }
        if(k == 1){
            int answer = oo;
            for(int i = 1; i <= q; i ++){
                is_q[u2[i - 1]][v2[i - 1]] = 1;
                is_q[u2[i]][v2[i]] = 0;
                int now_ans = t2.spfa_2(1, n);
                answer = min(answer, now_ans);
            }
            printf("%d", answer);
        } 
        else{
            int ans_1 = t2.spfa_1(1, n);
            printf("%d", ans_1 == oo ? -1 : ans_1);
        }
        return 0;
    }
    /*
    5 5 2 1
    1 2 1
    1 3 2
    2 4 2
    3 4 3
    4 5 4
    1 4 1
    2 5 1
    */

    秀秀 和哺 噜国 ( cut )

    #include<cstdio>
    #include<cstdlib>
    #define N 5555
    #define M 786433
    using namespace std;
    typedef long long LL;
    struct edge {
        int t,n;
    } e[N*2];
    LL h[N],size[N],f[N][N],g[N],cnt[N];
    int n,K,tote;
    void add(int u,int v) {
        e[++tote].t=v;
        e[tote].n=h[u];
        h[u]=tote;
        return ;
    }
    void dfs(int u,int fa) {
        size[u]++;
        f[u][1]=1;
        for (int i=h[u]; i; i=e[i].n) {
            int v=e[i].t;
            if (v==fa) continue;
            dfs(v,u);
            for (int j=1; j<=size[u]+size[v]; j++) g[j]=0;
            for (int j=1; j<=size[u]; j++) g[j]=cnt[v]*f[u][j]%M;
            for (int j=1; j<=size[u]; j++)
                for (int k=1; k<=size[v]; k++) g[j+k]=(g[j+k]+f[u][j]*f[v][k]%M)%M;
            for (int j=1; j<=size[u]+size[v]; j++) f[u][j]=g[j];
            size[u]+=size[v];
        }
        for (int i=K; i<=size[u]; i++) cnt[u]=(cnt[u]+f[u][i])%M;
        return ;
    }
    int main() {
        scanf("%d %d",&n,&K);
        for (int i=1; i<n; i++) {
            int u,v;
            scanf("%d %d",&u,&v);
            add(u,v);
            add(v,u);
        }
        dfs(1,1);
        printf("%d
    ",cnt[1]);
        fclose(stdin);
        fclose(stdout);
        return 0;
    }
  • 相关阅读:
    宝宝的成长脚印9/2
    宝宝的成长脚印9/5
    手动作花灯10/6
    EasyUI中EasyLoader加载数组模块
    easyui常用属性
    VS2010如何在一个web项目中使用APP_CODE下的自定义类
    MSSQL系统常用视图命令及其作用
    db_autopwn渗透流程
    渗透测试工具Nmap从初级到高级
    EasyUI中在表单提交之前进行验证
  • 原文地址:https://www.cnblogs.com/lyqlyq/p/7719202.html
Copyright © 2011-2022 走看看