zoukankan      html  css  js  c++  java
  • ACM-ICPC 2018 沈阳赛区网络预赛

    A Gudako and Ritsuka

    B Call of Accepted

    C Convex Hull

    D Made In Heaven

    #include <bits/stdc++.h>
    using namespace std;
    const int MM = 1e5+5;
    const int INF = 1e9+7;
    int dis[MM];
    int n, m;
    int s, t, k;
    int x, len, cnt[MM];
    struct node{
        int v, dis;
    };
    vector <node> MMap[MM];
    vector <node> reMMap[MM];
    queue <int> q;
    int T;
    int a, b, l;
    node p;
    
    struct Edge{
        int v, w;
        friend bool operator < (Edge a, Edge b){
            return (a.w + dis[a.v]) > (b.w + dis[b.v]);
        }
    };
    
    
    void spfa(int s)
    {
        bool vis[MM];
        memset(vis, 0, sizeof(vis));
        for (int i = 0; i < MM; ++i)
            dis[i] = INF;
        dis[s] = 0; vis[s] = true;
        while(!q.empty()) q.pop();
        q.push(s);
        while (!q.empty()){
            int u = q.front();
            q.pop();
            vis[u] = false;
            for (int i = 0; i < reMMap[u].size(); ++i){
                int v = reMMap[u][i].v,w = reMMap[u][i].dis;
                if (dis[v] > dis[u] + w){
                    dis[v] = dis[u] + w;
                    if (!vis[v]){
                        q.push(v);
                        vis[v] = true;
                    }
                }
            }
        }
    }
    
    int a_star(int s,int t){
        Edge node1, node2;
        if (s == t) k++;
        if (dis[s] == INF) return -1;
        priority_queue <Edge> q;
        memset(cnt, 0, sizeof(cnt));
        node1.w = 0,node1.v = s;
        q.push(node1);
        while (!q.empty()){
            node2 = q.top();
            q.pop();
            len = node2.w;
            x = node2.v,cnt[x]++;
            if (cnt[t] == k) return len;
            if (cnt[x] > k) continue;
            int siz = MMap[node2.v].size();
            for (int i = 0; i < siz; ++i)
            {
                node1.v = MMap[node2.v][i].v;
                node1.w = len + MMap[node2.v][i].dis;
                q.push(node1);
            }
        }
        return -1;
    }
    
    int main(){
        while (~scanf("%d%d", &n, &m)){
            scanf("%d%d%d%d", &s, &t, &k,&T);
            for (int i = 0; i < MM; ++i)
                MMap[i].clear();
            for (int i = 0; i < MM; ++i)
                reMMap[i].clear();
            for (int i = 1; i <= m; ++i){
                scanf("%d%d%d", &a, &b, &l);
                p.v = b;
                p.dis = l;
                MMap[a].push_back(p);
                p.v = a;
                reMMap[b].push_back(p);
            }
            spfa(t);
            int tmp = a_star(s,t); 
            if (tmp == -1) {
                puts("Whitesnake!");continue;
            }
            if (a_star(s,t) <= T) puts("yareyaredawa");
                else puts("Whitesnake!");
        }
    }
    View Code

    E The cake is a lie

    F Fantastic Graph 

    #include <bits/stdc++.h>
    
    using namespace std;
    typedef long long ll;
    const int maxn = 2005;
    int M[maxn][maxn];
    int tx[maxn],ty[maxn];
    int n,m,k,l,r,u,v;
    
    int main()
    {
        int cas = 1;
        while(~scanf("%d%d%d",&n,&m,&k))
        {
            memset(M,0,sizeof(M));
            scanf("%d%d",&l,&r);
            for(int i=0;i<k;i++)
            {
                scanf("%d%d",&u,&v);
                M[u][v]++;
            }
            int f = 1;
            for(int i=1;i<=n;i++){
                int temp = 0;
                for(int j=1;j<=m;j++){
                    temp += M[i][j];
                }
                tx[i] = temp;
                if(temp<l)f=0;
            }
            for(int i=1;i<=m;i++){
                int temp = 0;
                for(int j=1;j<=n;j++){
                    temp += M[j][i];
                }
                ty[i] = temp;
                if(temp<l)f=0;
            }
            if(f==0){
                printf("Case %d: No
    ",cas++);continue;
            }
            for(int i=1;i<=n;i++)
            {
                if(tx[i] > r)
                {
                    int tt = tx[i] - r;
                    for(int j=1;j<=m;j++){
                        int mi = min(tt,min(M[i][j],ty[j]-r));
                        tt -= mi;M[i][j] -= mi;ty[j] -= mi;
                        if(tt == 0)break;
                    }
                    if(tt > 0){
                        for(int j=1;j<=m;j++){
                            int mi = min(tt,min(M[i][j],ty[j]-l));
                            tt -= mi;M[i][j] -= mi;ty[j] -= mi;
                            if(tt == 0)break;
                        }
                    }
                    if(tt > 0){
                        f = 0;break;
                    }
                }
            }
            if(f){
                printf("Case %d: Yes
    ",cas++);
            }
            else{
                printf("Case %d: No
    ",cas++);
            }
        }
        return 0;
    }
    View Code

    G Spare Tire

    #include <bits/stdc++.h>
    using namespace std;
    #define N 100000005
    long long inv6 = 166666668;
    long long inv2 = 500000004;
    long long mod = 1e9+7;
    int p[20];
    int main()
    {   int n,m;
        while(~scanf("%d%d",&n,&m)){
            int cnt = 0;
            for(int i = 2;i*i <= m;++i){
                if(m % i == 0){
                    p[cnt++] = i;
                    while(m%i == 0) m /= i;
                }
            }
            
            if(m != 1) p[cnt++] = m;
            int up = (1<<cnt);
            long long ans = 0;
            for(int i = 0;i < up;++i){
                int tmp = 1;
                int kk = 0;
                for(int j = 0;j < cnt;++j){
                    if((i>>j)&1) kk++,tmp *= p[j];
                }
                long long num = n/tmp;
                long long now = 1LL*tmp*tmp%mod*(num*2+1)%mod*(num+1)%mod*num%mod*inv6%mod;
                now = (now + 1LL* tmp * (1+num) % mod * num % mod * inv2 % mod) % mod;
                ans = (ans + now*(kk&1 ? -1 : 1) + mod) % mod;
            }
            printf("%lld
    ",ans);
        }
        return 0;
    }
    View Code

    H Hamming Weight

    I Lattice's basics in digital electronics

    #include <bits/stdc++.h>
    using namespace std;
    char s[20];
    int mp[60000];
    char str[200005];
    bool code[1000006],nxt[1000005];
    
    int main()
    {
        int T;
        cin >> T;
        while(T--){
            memset(mp,0,sizeof(mp));
            int m,n;
            scanf("%d%d",&m,&n);
            int v;
            for(int i = 1;i <= n;++i){
                scanf("%d%s",&v,s);
                int len = strlen(s);
                int tmp = 0;
                for(int j = 0;j < len;++j){
                    tmp *= 3;
                    tmp += s[j]-'0'+1;
                }
                mp[tmp] = v;
            }
            scanf("%s",str);
            int len = strlen(str);
            int now = 0;
            for(int i = 0;i < len;++i){
                now += 4;
                int kk;
                if(str[i] >= '0' && str[i] <= '9')
                    kk = str[i] - '0';
                else
                    kk = str[i] - 'a' + 10;
                for(int j = 1;j <= 4;++j){
                    code[now-j] = (kk & 1);
                    kk >>= 1;
                }
            }
            int cnt;
            int tot = 0;
            for(int i = 0;i <= now;i+=9){
                cnt = 0;
                for(int j = i;j < i+8;++j){
                    if(code[j]) cnt++;
                }
                if(((cnt&1) && code[i+8] == 0) || ((cnt&1) == 0 && code[i+8])){
                    for(int j = i;j < i+8;++j){
                        nxt[tot++] = code[j];
                    }
                }
            }
            int tmp = 0;
            cnt = 0;
            for(int i = 0;i < tot;++i){
                if(cnt == m) break;
                tmp *= 3;
                tmp += nxt[i]+1;
                if(mp[tmp]){
                    cnt++;
                    printf("%c",mp[tmp]);
                    tmp = 0;
                }
            }
            puts("");
        }
        return 0;
    }
    View Code

    J Ka Chang

    K Supreme Number 

    #include <bits/stdc++.h>
    using namespace std;
    
    int ans[20] = {1,2,3,5,7,11,13,17,23,31,37,53,71,73,113,131,137,173,311,317};
    char s[1005];
    int main()
    {
        int T;
        cin >> T;
        cin.ignore();
        int ii = 1;
        while(T--){
            printf("Case #%d: ",ii++);
            gets(s);
            int len = strlen(s);
            if(len >= 4) puts("317");
            else{
                int tmp = 0;
                for(int i = 0;i < len;++i){
                    tmp *= 10;
                    tmp += s[i]-'0';
                }
                for(int i = 19;i >= 0;--i){
                    if(ans[i] <= tmp){
                        printf("%d
    ",ans[i]);
                        break;
                    }
                }
            }
        }
        return 0;
    }
    View Code
  • 相关阅读:
    CCF_ 201403-2_窗口
    CCF_201503-2_数字排序
    [loj3346]交换城市
    [cf516E]Drazil and His Happy Friends
    [cf505E]Mr. Kitayuta vs. Bamboos
    [loj3343]超现实树
    [loj3331]选课
    [loj3342]制作菜品
    [loj3156]回家路线
    [loj3339]美食家
  • 原文地址:https://www.cnblogs.com/solvit/p/9651794.html
Copyright © 2011-2022 走看看