zoukankan      html  css  js  c++  java
  • Codeforces Round #707 (Div. 2, based on Moscow Open Olympiad in Informatics)

    A.一道模拟题

    #include <bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    int main () {
    	int T;
    	cin >> T;
    	while(T--) {
    		int n;
    		cin >> n;
    		std::vector<ll> a(n);
    		std::vector<ll> b(n);
    		std::vector<ll> t(n);
    		for(int i = 0; i < n; ++i) {
    			cin >> a[i] >> b[i];
    		}
    		for(int i = 0; i < n; ++i) {
    			cin >> t[i];
    		}
    		ll last = 0;
    		ll ans = 0;
    		for(int i = 0; i < n; ++i) {
    			last = (i == 0) ? 0 : b[i - 1]; 
    			ans += a[i] - last;
    			ans += t[i];
    			if(i == n - 1) {
    				break;
    			}
    			ll gap = ll(double(b[i] - a[i]) / 2.0 + 0.5);
    			ans += gap;
    			if(ans < b[i]) ans = b[i];
    			// cout << ans << endl;
    		}
    		cout << ans << endl;
    	}
    }
    

    B 从顶部往下部扫描O(n)。如果区间修改,考虑树状数组O(nlogn)

    #include <bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    int main () {
    	int T;
    	cin >> T;
    	while(T--) {
    		int n;
    		cin >> n;
    		std::vector<int> v(n);
    		std::vector<int> ans(n, 0);
    		for(int i = 0; i < n; ++i) {
    			cin >> v[i];
    		}
    		int gap = v[n - 1];
    		for(int i = n - 1; i >= 0; ) {
    			if(gap) {
    				ans[i] = 1;
    				gap--;
    			}
    			i--;
    			gap = max(gap, v[i]);
    		}
    		for(int i = 0; i < n; ++i) {
    			cout << ans[i];
    			if(i == n - 1) {
    				cout << endl;
    			} else {
    				cout << " ";
    			}
    		}
    	}
    }
    

    C 利用鸽巢原理分析如果为yes,判断在Time Exceed之前即可完成

    #include <bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    typedef pair<ll, ll> P;
    #define ft first
    #define se second
    std::vector<P> s(5000010);
    int main () {
    	int n;
    	cin >> n;
    	std::vector<ll> v(n + 1);
    	for(int i = 1; i <= n; ++i) {
    		cin >> v[i];
    	}
    
    	for(int i = 1; i < n; ++i) {
    		for(int j = i + 1; j <= n; ++j) {
    			ll x = v[i] + v[j];
    			if(s[x].ft && s[x].se && s[x].ft != i && s[x].ft != j && s[x].se != i && s[x].se != j) {
    				cout << "YES" << endl;
    				cout << s[x].ft << " " << s[x].se << " " << i << " " << j << endl;
    				return 0;
    			}
    			s[x].ft = i, s[x].se = j;
    		}
    	}
    	cout << "NO" << endl;
    }
    
    
    作者:LightAc
    出处:https://www.cnblogs.com/lightac/
    联系:
    Email: dzz@stu.ouc.edu.cn
    QQ: 1171613053
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。
  • 相关阅读:
    vs2010创建文件夹
    strlen源码,远没有想象中的那么简单、、、、
    排序
    字符数组,字符指针,sizeof,strlen总结
    QT中的QInputDialog的小例子
    QT实现启动画面
    QT中Dialog的使用

    QT中的文件浏览
    Python日期操作
  • 原文地址:https://www.cnblogs.com/lightac/p/14531833.html
Copyright © 2011-2022 走看看