zoukankan      html  css  js  c++  java
  • 【习题 6-7 UVA

    【链接】 我是链接,点我呀:)
    【题意】

    在这里输入题意

    【题解】

    模拟就好

    【代码】

    /*
    1.Shoud it use long long ?
    2.Have you ever test several sample(at least therr) yourself?
    3.Can you promise that the solution is right? At least,the main ideal
    4.use the puts("") or putchar() or printf and such things?
    5.init the used array or any value?
    6.use error MAX_VALUE?
    7.use scanf instead of cin/cout?
    */
    #include <bits/stdc++.h>
    using namespace std;
    
    const int N = 100;
    
    int n, m, Q;
    int rest[N + 10];
    pair<vector <int>, vector <int> >  v[N + 10];
    map <int, int> cnt[N+10];
    
    int main() {
    	#ifdef LOCAL_DEFINE
    		freopen("F:\c++source\rush_in.txt", "r", stdin);
    		freopen("F:\c++source\rush_out.txt", "w", stdout);
    	#endif
    	ios::sync_with_stdio(0), cin.tie(0);
    	int Kase = 0;
    	while (cin >> n && n) {
    		for (int i = 1; i <= n; i++) cin >> rest[i];
    		cin >> m;
    		for (int i = 1; i <= m; i++) {
    			v[i].first.clear(), v[i].second.clear();
    			cnt[i].clear();
    			int x;
    			cin >> x;
    			while (x != 0) {
    				if (x < 0) {
    					cnt[i][-x]++;
    					v[i].first.push_back(-x);
    				}
    				else {
    					v[i].second.push_back(x);
    				}
    				cin >> x;
    			}
    		}
    
    		cout << "Case " << ++Kase << ": ";
    		bool alive = true;
    		cin >> Q;
    		for (int i = 1; i <= Q; i++) {
    			bool ok = false;
    			for (int j = 1; j <= m; j++) {
    				bool ok1 = true;
    				for (int x : v[j].first) {
    					if (rest[x] < cnt[j][x]) ok1 = false;
    				}
    				if (ok1) {
    					for (int x : v[j].first) {
    						rest[x]--;
    					}
    					for (int x : v[j].second) {
    						rest[x]++;
    					}
    					ok = true;
    					break;
    				}
    			}
    			if (!ok) {
    				alive = ok;
    				cout << "dead after " << i-1 << " transitions" << endl;
    				break;
    			}
    		}
    		if (alive) {
    			cout << "still live after " << Q << " transitions" << endl;
    		}
    		cout << "Places with tokens:";
    		for (int i = 1; i <= n; i++)
    			if (rest[i])
    				cout << " " << i << " " << "(" << rest[i] << ")";
    		cout << endl << endl;
    	}
    	return 0;
    }
    
  • 相关阅读:
    php设计模式注册表模式
    zend studio
    java中模仿C++实现条件编译
    javascript去掉字符串空格——转
    领域模型谈实体对象和值对象
    面向对象语言的多分派、单分派、双重分派
    Java中Split函数的用法技巧
    web页面导出到Excel乱码解决
    在web项目中如何使用rdlc报表
    ASP.NET控件10个最有用的属性详解
  • 原文地址:https://www.cnblogs.com/AWCXV/p/7881450.html
Copyright © 2011-2022 走看看