2015年1月29日 星期四

TIOJ 1174 The Shortest Distance

#include <cstdio>
#include <cstdlib>
#include <algorithm>
using namespace std;
int main(){
    int n, m, ans;
    int a[100005], b[100005];
    scanf("%d %d",&n, &m);
    for (int i = 0; i < n; ++i)
        scanf("%d", &a[i]);
    for (int i = 0; i < m; ++i)
        scanf("%d", &b[i]);
    
    sort(a, a+n);
    sort(b, b+m);

    int x = 0, y = 0;
    ans = abs(a[0] - b[0]);
    while(x < n && y < m){
        ans = min(ans ,abs(a[x] - b[y]));
        if(a[x] < b[y])
            x++;
        else
            y++;
    }

    printf("%d\n", ans);
} 

TIOJ 1018 D.A Logical Problem

#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <vector>
using namespace std;
int main(){
    int T;
    char ss[100];
    scanf("%d\n",&T);
    vector<char> v,vv;
    while(T--){
        gets(ss);
        v.clear();
        vv.clear();
        for(int i = 0; ss[i] != '\0'; i++){
            if(ss[i] == ' '){
                if(ss[i+1] == 'n' && ss[i+2] == 'o' && ss[i+3] == 't')
                    v.push_back('n');
                else if(ss[i+1] == 'a' && ss[i+2] == 'n' && ss[i+3] == 'd')
                    v.push_back('a');
                else if(ss[i+1] == 'o' && ss[i+2] == 'r')
                    v.push_back('o');
                else if(ss[i+1] == 'T' && ss[i+2] == 'H' && ss[i+3] == 'E'  && ss[i+4] == 'N')
                    v.push_back('t');
                else
                    v.push_back(ss[i+1]);
            }
        }

        int s;
        bool f = true;
        for (s = 0; v[s] != 't'; ++s){ }

        for (int i = s+1; i < v.size(); ++i){
            if(v[i] < 'A' || (v[i] > 'Z' && v[i] < 'a') || v[i] > 'z')
                continue;
            if(v[i] == 'a')
                vv.push_back('o');
            else if(v[i] == 'o')
                vv.push_back('a');
            else if(v[i] == 'n')
                f = false;
            else{
                if(f)
                    vv.push_back('n');
                vv.push_back(v[i]);
                f = true;
            } 
        }

        vv.push_back('t');
        for (int i = 0 ; i < s; ++i){
            if(v[i] == 'a')
                vv.push_back('o');
            else if(v[i] == 'o')
                vv.push_back('a');
            else if(v[i] == 'n')
                f = false;
            else{
                if(f)
                    vv.push_back('n');
                vv.push_back(v[i]);
                f = true;
            } 
        }
        
        printf("IF ");
        for (int i = 0; i < vv.size(); ++i){
            if(vv[i] == 'a')
                printf("and ");
            else if(vv[i] == 'o')
                printf("or ");
            else if(vv[i] == 'n')
                printf("not ");
            else if(vv[i] == 't')
                printf("THEN ");
            else
                printf("%c ", vv[i]);
        }
        printf("\n");
    }   
} 

TIOJ 1210 圖論 之 簡單圖測試

#include <cstdio>
#include <cstdlib>
#include <algorithm>
int main(){
    int degree[10005];
    int n;
    bool ans;
    int num;
    while(1){
        scanf("%d", &n);
        if(n == 0){ break; }

        for (int i = 0; i < n; ++i)
            scanf("%d", &degree[i]);

        ans = true;
        std::sort(degree, degree+n);
        num = 0;
        while(1){
            if(degree[n-1] >= n)
                ans = false;
            if(degree[n-1] == 0 || ans == false)
                break;

            for (int i = n-2; i >= n-1-degree[n-1]; --i){
                if(degree[i] == 0){
                    ans = false;
                    break;
                }
                degree[i]--;
            }

            degree[n-1] = 0; 
            std::swap(degree[num], degree[n-1]);
            num++;
            std::sort(degree+num, degree+n);
        }

        printf("%s\n", ans ? "Yes":"No");
    }
}

TIOJ 1217 傳說中的簡單題

#include <cstdio>
#include <cstdlib>
int main(){
    char s[1001];
    while(gets(s) != NULL)
        printf("%s\n", s);
}

TIOJ 1211 圖論 之 最小生成樹

#include <cstdio>
#include <cstdlib>
#include <vector>
#include <algorithm>
using namespace std;
int n,m;
bool ans = true;
struct node{
    int color;
    vector<int> edge;
};
node N[100005];

bool visit[100005];
void dfs(int x){
    if(!ans){ return; }
    if(visit[x]){ return; } 
    visit[x] = true;

    for (int i = 0; i < N[x].edge.size(); ++i){
        if(N[N[x].edge[i]].color == 0)
            N[N[x].edge[i]].color = N[x].color * -1;
        else if(N[N[x].edge[i]].color == N[x].color){
            ans = false;
            return;
        }

        if(!visit[N[x].edge[i]])
            dfs(N[x].edge[i]);
    }
}

int main(){
    int a, b;
    while(true){
        scanf("%d %d", &n, &m);
        if(n+m == 0){ break; }

        for (int i = 1; i <= n; ++i){
            N[i].color = 0;
            N[i].edge.clear();
            visit[i] = false;
        }

        for (int i = 0; i < m; ++i){
            scanf("%d %d", &a, &b);
            N[a].edge.push_back(b);
            N[b].edge.push_back(a);
        }
    
        ans = true;
        N[1].color = 1;
        dfs(1);

        printf("%s\n", ans? "Yes":"No");
    }
}

TIOJ 1209 圖論 之 二分圖測試

#include <cstdio>
#include <cstdlib>
#include <vector>
#include <algorithm>
using namespace std;
int n,m;
bool ans = true;
struct node{
    int color;
    vector<int> edge;
};
node N[100005];

bool visit[100005];
void dfs(int x){
    if(!ans){ return; }
    if(visit[x]){ return; } 
    visit[x] = true;

    for (int i = 0; i < N[x].edge.size(); ++i){
        if(N[N[x].edge[i]].color == 0)
            N[N[x].edge[i]].color = N[x].color * -1;
        else if(N[N[x].edge[i]].color == N[x].color){
            ans = false;
            return;
        }

        if(!visit[N[x].edge[i]])
            dfs(N[x].edge[i]);
    }
}

int main(){
    int a, b;
    while(true){
        scanf("%d %d", &n, &m);
        if(n+m == 0){ break; }

        for (int i = 1; i <= n; ++i){
            N[i].color = 0;
            N[i].edge.clear();
            visit[i] = false;
        }

        for (int i = 0; i < m; ++i){
            scanf("%d %d", &a, &b);
            N[a].edge.push_back(b);
            N[b].edge.push_back(a);
        }
    
        ans = true;
        N[1].color = 1;
        dfs(1);

        printf("%s\n", ans? "Yes":"No");
    }
}