1 条题解

  • 0
    @ 2024-12-24 9:54:35

    C :

    #include<stdio.h>
    void main(){puts("Task0 Task1 Task2 Task3");}
    

    C++ :

    #include<stdio.h>
    #include<string.h>
    #include<ctype.h>
    #include<string>
    #include<queue>
    #include<map>
    #include<vector>
    using namespace std;
    
    char str[100006];
    string task[100000];
    int in[100000];
    int n;
    
    class cmp {
    	public:
    	bool operator()(int a,int b) const {
    		return task[a]>task[b];
    	}
    };
    
    map<string,int> mm;
    priority_queue<int,vector<int>,cmp> pq;
    vector<int> l[100000];
    
    int getIndex(char *s) {
    	map<string,int>::iterator it=mm.find(string(s));
    	if (it==mm.end()) {
    		int ret=mm.size();
    		task[ret]=string(s);
    		mm.insert(make_pair(task[ret],ret));
    		return ret;
    	}
    	return it->second;
    }
    
    int main() {
    	while(scanf("%d",&n)!=EOF) {
    		mm.clear();
    		for(int i=0;i<n;i++) l[i].clear(),in[i]=0;
    		for(int i=0;i<n;i++) {
    			scanf("%s",str);
    			char *p=strtok(str,"(,)");
    			int t=getIndex(p);
    			while(p=strtok(NULL,"(,)")) {
    				if (!strcmp(p,"NULL")) continue;
    				int t1=getIndex(p);
    				l[t].push_back(t1);
    				in[t1]++;
    			}
    		}
    		for(int i=0;i<n;i++) if (!in[i]) pq.push(i);
    		int first=1;
    		while(!pq.empty()) {
    			if (first) first=0; else putchar(' ');
    			int cur=pq.top();
    			pq.pop();
    			printf("%s",task[cur].c_str());
    			for(int i=0;i<l[cur].size();i++) {
    				if (!--in[l[cur][i]]) pq.push(l[cur][i]);
    			}
    		}
    		puts("");
    	}
    	return 0;
    }
    
    

    Java :

    
    import java.util.*;
    import java.util.concurrent.LinkedBlockingQueue;
    
    public class Main {
    	public static void main(String[] args) {
    		Scanner in = new Scanner(System.in);
    		while(in.hasNext()) {
    			String ns = in.nextLine();
    			int n = Integer.valueOf(ns);
    			int[][] a = new int[n][n];
    			boolean[] wasVisit = new boolean[n];
    			for(int i=0;i<n;i++) {
    				String s = in.nextLine();
    				int x = s.indexOf("(");
    				String s1 = s.substring(4,x);
    				int curc = Integer.valueOf(s1);
    				s = s.substring(x+1,s.length()-1);
    				if(s.length()<=4)
    					continue;
    				String[] ss = s.split(",");
    				for(int j=0;j<ss.length;j++) {
    					int curr = Integer.valueOf(ss[j].substring(4,ss[j].length()));
    					a[curr][curc] = 1;
    				}
    			}
    			Queue<Integer> q = new LinkedBlockingQueue<>();
    			while(q.size()<n) {
    				for(int i=0;i<n;i++) {
    					if(wasVisit[i])
    						continue;
    					boolean b = true;
    					for(int j=0;j<n;j++) {
    						if(a[i][j]==1) {
    							b = false;
    							break;
    						}
    					}
    					if(b) {
    						q.add(i);
    						wasVisit[i] = true;
    						for(int j=0;j<n;j++)
    							a[j][i] = 0;
    						break;
    					}
    				}
    			}
    			System.out.print("Task"+q.remove());
    			while(!q.isEmpty()) {
    				System.out.print(" Task"+q.remove());
    			}
    			System.out.println();
    		}
    	}
    }
    
    • 1

    信息

    ID
    1291
    时间
    1000ms
    内存
    32MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者