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
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。
  • 相关阅读:
    对double数据类型的数据保留两位小数,并且进行四舍五入
    div位置设置
    每天一算法 -- (排序算法总结)
    SQL行转列
    设计模式的六大原则
    每天一算法 -- (插入排序)
    每天一算法 -- (选择排序)
    通用扩展函数--类型转换
    wcf和webservice
    Cookie的介绍及使用
  • 原文地址:https://www.cnblogs.com/lightac/p/14531833.html
Copyright © 2011-2022 走看看