西安邮电大学第五届ACM-ICPC校赛(同步赛) 解题报告

A拯救咕咕咕之史莱姆

签到题。从1到6天,依次扣除3,6,9,12,18,27,求个和就是75,也就是说只要hp<=75,他就会乖乖求饶,否则,死磕到底。

#include <iostream>
#include <map>
#include <ctime>
#include <vector>
#include <climits>
#include <algorithm>
#include <random>
#include <cstring>
#include <cstdio>
#include <map>
#include <set>
#include <bitset>
#include <queue>
#define inf 0x3f3f3f3f
#define IOS ios_base::sync_with_stdio(0); cin.tie(0);
#define rep(i, a, n) for(register int i = a; i <= n; ++ i)
#define per(i, a, n) for(register int i = n; i >= a; -- i)
#define ONLINE_JUDGE
using namespace std;
typedef long long ll;
const int mod=1e9+7;
template<typename T>void write(T x)
{
    if(x<0)
    {
        putchar('-');
        x=-x;
    }
    if(x>9)
    {
        write(x/10);
    }
    putchar(x%10+'0');
}

template<typename T> void read(T &x)
{
    x = 0;char ch = getchar();ll f = 1;
    while(!isdigit(ch)){if(ch == '-')f*=-1;ch=getchar();}
    while(isdigit(ch)){x = x*10+ch-48;ch=getchar();}x*=f;
}
ll gcd(ll a,ll b){return b==0?a:gcd(b,a%b);}
ll lcm(ll a,ll b){return a/gcd(a,b)*b;};
ll ksm(ll a,ll n){//看是否要mod
    ll ans=1;
    while(n){
        if(n&1) ans=(ans*a)%mod;
        a=a*a%mod;
        n>>=1;
    }
    return ans%mod;
}
//==============================================================
ll n;


int main()
{
    #ifndef ONLINE_JUDGE
    freopen("in.txt","r",stdin);
    freopen("out.txt","w",stdout);
    #endif
    clock_t c1 = clock();
    //===========================================================
    while(~scanf("%lld",&n)&&n){
        if(n<=75) puts("AOLIGEI!");
        else puts("DAAAAAMN!");
    }
    //===========================================================
    std::cerr << "Time:" << clock() - c1 << "ms" << std::endl;
    return 0;
}

B. 烦人的依赖
裸的拓扑排序,只是需要把字符串转为数字进行排序(是字符串,不是字符!)。对于安装字典序小的要求,我们可以用优先队列进行处理。
PS.听说卡常,需要注意下。

#include <iostream>
#include <map>
#include <ctime>
#include <vector>
#include <climits>
#include <algorithm>
#include <random>
#include <cstring>
#include <cstdio>
#include <map>
#include <set>
#include <bitset>
#include <queue>
#define inf 0x3f3f3f3f
#define IOS ios_base::sync_with_stdio(0); cin.tie(0);
#define rep(i, a, n) for(register int i = a; i <= n; ++ i)
#define per(i, a, n) for(register int i = n; i >= a; -- i)
#define ONLINE_JUDGE
using namespace std;
typedef long long ll;
const int mod = 1e9 + 7;
template<typename T>void write(T x)
{
    if (x < 0)
    {
        putchar('-');
        x = -x;
    }
    if (x > 9)
    {
        write(x / 10);
    }
    putchar(x % 10 + '0');
}

template<typename T> void read(T& x)
{
    x = 0; char ch = getchar(); ll f = 1;
    while (!isdigit(ch)) { if (ch == '-')f *= -1; ch = getchar(); }
    while (isdigit(ch)) { x = x * 10 + ch - 48; ch = getchar(); }x *= f;
}
ll gcd(ll a, ll b) { return b == 0 ? a : gcd(b, a % b); }
ll lcm(ll a, ll b) { return a / gcd(a, b) * b; };
ll ksm(ll a, ll n) {//看是否要mod
    ll ans = 1;
    while (n) {
        if (n & 1) ans = (ans * a) % mod;
        a = a * a % mod;
        n >>= 1;
    }
    return ans % mod;
}
//==============================================================
const int maxn = 3e4 + 10, maxm = 1e5 + 10;
int t, n, m;
struct Edge {
    int next, to;
}e[maxm];//
int head[maxn], cnt;//
void add(int x, int y) {
    e[cnt].to = y;
    e[cnt].next = head[x];
    head[x] = cnt++;
}
int in[maxn];//
vector<int> ans;//
map<string, int> li;//
vector<string> tmp;//
bool topo() {
    priority_queue<int, vector<int>, greater<int>> que;
    rep(i, 1, n) {
        if (in[i] == 0) que.push(i);
    }
    if (que.size() == 0) return false;
    while (!que.empty()) {
        int u = que.top();
        que.pop();
        ans.push_back(u);
        for (int i = head[u]; ~i; i = e[i].next) {
            int v = e[i].to;
            in[v]--;
            if (in[v] == 0) {
                que.push(v);
            }
        }
    }
    return true;
}

int main()
{
#ifndef ONLINE_JUDGE
    freopen("in.txt", "r", stdin);
    //freopen("out.txt","w",stdout);
#endif
    clock_t c1 = clock();
    //===========================================================
    read(t);
    int kase = 0;
    while (t--) {
        read(n), read(m);
        cnt = 0;
        ans.clear();
        memset(head, -1, sizeof(head));
        memset(e, 0, sizeof(e));
        memset(in, 0, sizeof(in));
        li.clear(), tmp.clear();
        rep(i, 1, n) {
            string na;
            cin >> na;
            tmp.push_back(na);
        }
        sort(tmp.begin(), tmp.end());
        rep(i, 0, tmp.size() - 1) {
            li[tmp[i]] = i + 1;
        }
        while (m--) {
            string s, t;
            cin >> s >> t;
            int a = li[s], b = li[t];
            add(a, b);
            in[b]++;
        }
        printf("Case #%d:\n", ++kase);
        if (!topo()) {
            puts("Impossible");
        }
        else {
            if (ans.size() != n) {
                puts("Impossible");
            }
            else {
                rep(i, 0, ans.size() - 1) {
                    printf("%s",tmp[ans[i] - 1].c_str()), putchar('\n');
                }
            }
        }
    }
    //===========================================================
    std::cerr << "Time:" << clock() - c1 << "ms" << std::endl;
    return 0;
}
全部评论

相关推荐

07-11 22:27
中南大学 Java
程序员牛肉:学历的话没问题。但是没问题的也就只有学历了。 其实你的整体架构是正确的,博客接着干。但是项目有点过于简单了。从后端的角度上讲,你这也就是刚入门的水平,所以肯定约面试够呛。 如果你要应聘后端岗位,那你第一个项目竟然是仿写操作系统。这个你要面试官咋问你。你一定要记住一点,你简历上写的所有的东西,都是为了证明你有能力胜任当前的岗位,而不是为了证明你自己会什么。 如果你只是浅浅的做几个项目,描述也都是烂大街。技术点也都是各种混水类的配置类需求,那你就不要幻想自己能走多远。一定要保持思考,保持学习。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务