zoukankan      html  css  js  c++  java
  • UESTC 2014 Summer Training #18 Div.2

    A.UVALive 6661

      题意从1~N中选k个数,和为s的方案数

      第一眼搜索,估计错状态量,又去yydp...浪费大量时间

      数据很小的,状态数都不会超过2^N...直接dfs就过了

    //state二进制表示选取的数

    #include <iostream>
    #include <cstdio>
    #include <cstdlib>
    #include <cstring>
    
    using namespace std;
    
    const int maxn = 200;
    
    int N, S, K, cnt;
    
    void dfs(int state, int k, int s, int start)
    {
    //    cout << k << ' ' << s << endl;
        if(k == 0 && s == 0) {
    //        for(int i = 0; i < N; i++)
    //            if(state&(1<<i))    cout << (i+1) << ' ';
    //        cout << endl;
            cnt++;
        }
        if(k == 0)    return;
        for(int i = start; i < N; i++) {
            if(state&(1<<i))    continue;
            if(s < i+1)    break;
            dfs(state|(1<<i), k-1, s-(i+1), i+1);
        }
    }
    
    int main()
    {
    #ifdef LOCAL
        freopen("A.in", "r", stdin);
    #endif
        while(scanf("%d%d%d", &N, &K, &S) != EOF) {
            if(N == 0 && K == 0)    break;
            cnt = 0;
            dfs(0, K, S, 0);
            printf("%d
    ", cnt);
        }
        return 0;
    }

    B.UVALive 6662

      数据范围很小,直接模拟整个过程就行了。我是把长度、时间都×2,毕竟0.5不好处理。每隔1s计算所有蚂蚁位置,处理相交情况,标记走出通道。

    #include <iostream>
    #include <cstdio>
    #include <cstdlib>
    #include <cstring>
    
    using namespace std;
    
    const int maxn = 200+20;
    
    int n, l, cnt, tcost, ans;
    int p[maxn], dx[maxn];
    bool done[maxn];
    
    int main()
    {
    #ifdef LOCAL
        freopen("B.in", "r", stdin);
    #endif
        while(scanf("%d%d", &n, &l) != EOF) {
            if(n == 0 && l == 0)    break;
            memset(done, 0, sizeof(done));
            cnt = 0;
            for(int i = 1; i <= n; i++) {
                int x;
                char dir;
                getchar();
                scanf("%c%d", &dir, &x);
                if(dir == 'R')    dx[i] = 1;
                else    dx[i] = -1;
                p[i] = x*2;
            }
            for(int t = 1; t <= 2*l; t++) {
                int lastone = 0;
                for(int i = 1; i <= n; i++) {
                    if(done[i])    continue;
                    p[i] += dx[i];
                    if(p[i] == 0 || p[i] == 2*l) {
                        if(!lastone || p[i] == 0)    lastone = i;
                        done[i] = true;
                        cnt++;
                    }
                }
                for(int i = 2; i <= 2*l; i++) {
                    if(i % 2)    continue;
                    int x = 0;
                    for(int j = 1; j <= n; j++) {
                        if(done[j] || p[j] != i)    continue;
                        if(!x)    x = j;
                        else {
                            dx[x] *= -1;
                            dx[j] *= -1;
                        }
                    }
                }
                if(cnt == n) {
                    tcost = t;
                    ans = lastone;
                    break;
                }
            }
            //finish
            cout << tcost/2 << ' ' << ans << endl;
        }
        return 0;
    }

      心态又开始崩了,A了两道就没有认真的看题了...不过这次剩下的题似乎都A不出来呢

  • 相关阅读:
    NoSQL数据库:Java开源项目Neo4j简介
    EPOLL和IOCP比较
    CString&CStringA&CStringW之间的相互转换
    CString和CStringA之间的转换
    Windows IOCP模型与Linux EPOLL模块之比较
    OCP-1Z0-053-V13.02-708题
    OCP-1Z0-053-V13.02-709题
    OCP-1Z0-053-V12.02-342题
    OCP-1Z0-053-V12.02-341题
    OCP-1Z0-053-V13.02-706题
  • 原文地址:https://www.cnblogs.com/gemmeg/p/3901766.html
Copyright © 2011-2022 走看看