1. 程式人生 > 程式設計 >python使用matplotlib繪製折線圖的示例程式碼

python使用matplotlib繪製折線圖的示例程式碼

比賽連結:http://codeforces.com/contest/1419

A題

題意:

簡單博弈論。運用數學知識分析出規律:如果總數是奇數時,最後剩下的一定是位置為奇數位置對應的值。(如果想不明白建議模擬一下過程)在這種情況下,Raze可以選擇剩下哪一個,所以如果存在奇數位置存在數為奇數,Raze一定獲勝,否則失敗。同理,如果總數是偶數,最後剩下位置一定是偶數位置對應的值。在這種情況下,Breach可以選擇剩下哪一個,所以如果存在偶數位置存在數為偶數,Breach一定獲勝,否則失敗。

#include <bits/stdc++.h>
using namespace std;
int main () {
	int t;
	cin >> t;
	while(t--) {
		int n;
		cin >> n;
		int odd = 0, even = 0;
		string s;
		cin >> s;
		bool ok;
		if(n & 1) {
			ok = 0;
			for(int i = 0; i < s.size(); i += 2) {
				int num = s[i] - 0;
				if(num & 1) {
					ok = 1;
					break;
				}
			}
		}
		else {
			ok = 1;
			for(int i = 1; i < s.size(); i += 2) {
				int num = s[i] - 0;
				if(!(num & 1)) {
					ok = 0;
					break;
				}
			}			
		}		
		if(ok) {
			cout << "1" << endl;
		}
		else {
			cout << "2" << endl;
		}
	}
} 

B題

是一個數學規律尋找題。要求得到完美的圖。由數學分析能力可以看出如下規律。1 3 7。。。。階是完美的。相鄰值相差為2, 2^2, 2^3.....通過這個規律先打表然後判斷有多少個滿足。

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int main () {
	int t;
	cin >> t;
	vector<ll> biao;
	ll num = 1; 
	ll j = 1;
	for(ll i = 0; i <= 1e18; ) {
		i += (num + 1) * num / 2; 
		num += pow(2, j);
		j += 1;
		biao.push_back(i);
	}
//	for(int i = 0; i < biao.size(); ++i) {
//		cout << biao[i] << " "; 
//	}
//	putchar(10);
	while(t--) {
		ll n;
		cin >> n;
		int ans = 0;
		for(int i = 0; biao[i] <= n; ++i) {
			ans++;
		}
		cout << ans << endl;
	} 
} 

C題

思維題

如果全部值一樣且跟目標值一樣則0次;如果存在一個值與目標值一樣或者正負相等則1次;其餘情況兩次

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int main () {
	int t;
	cin >> t;
	for(int i = 0; i < t; ++i) {
		int n, x;
		cin >> n >> x;
		vector<int> v;
		int zheng = 0;
		int fu = 0;
		bool sb = 0;
		for(int i = 0; i < n; ++i) {
			int temp;
			cin >> temp;
			v.push_back(temp);
			if(temp > x) {
				zheng += temp - x; 
			}
			else {
				fu += x - temp;
			}
			if(temp == x) {
				sb = 1; 
			}
		}
		if(zheng == 0 && fu == 0) {
			cout << 0 << endl;
		}
		else if(zheng == fu || sb) {
			cout << 1 << endl;
		}
		else {
			cout << 2 << endl;
		}	
	}
} 

D題

憨批題 大的插奇數位置,小的插偶數位置。數量(n-1)/2

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int main () {
	int n;
	cin >> n;
	vector<ll> v;
	vector<ll> ans;
//	v.resize(n);
	ans.resize(n + 10);
	for(int i = 0; i < n; ++i) {
		ll temp;
		cin >> temp;
		v.push_back(temp);
	}
	sort(v.begin(), v.end());
//	for(int i = 0; i < n; ++i) {
//		cout << v[i] << " ";
//	}
//	cout <<endl;
	int maxx = n - 1;
	for(int i = 0; i < n; i += 2) {
		ans[i] = v[maxx--];
	}
	int tt = 0; 
	for(int i = 1; i < n; i += 2){
		ans[i] = v[tt++];
	} 
	cout << (n - 1) / 2 << endl;
	for(int i = 0; i < n; ++i) {
		cout << ans[i] << " ";
	}
	cout << endl;
}