码迷,mamicode.com
首页 > 其他好文 > 详细

2020/3/20 刷题

时间:2020-03-18 23:53:14      阅读:79      评论:0      收藏:0      [点我收藏+]

标签:put   over   define   als   pushd   size   ace   ble   clu   

1.

技术图片

 

 

 

Sample Input

    6
    -2 11 -4 13 -5 -2
    10
    -10 1 2 3 4 -5 -23 3 7 -21
    6
    5 -8 3 2 5 0
    1
    10
    3
    -1 -5 -2
    3
    -1 0 -2
    0

Sample Output

    20 11 13
    10 1 4
    10 3 5
    10 10 10
    0 -1 -2
    0 0 0

 

//最基础的DP 数据结构作业
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 100010;
int dp[MAXN];	//代表从第一个元素到i的子序列的最大
int a[MAXN];
int main () {
	int K;
	while(~scanf("%d", &K) && K) {
		dp[0] = 0;
		int s1 = -1, e1 = -1, s2 = - 1, e2 = -1;
		int t = 0;
		int tttt = -1;
		memset(dp, 0, sizeof dp);
		memset(a, 0, sizeof a);
		for(int i = 1; i <= K; ++i) {
			scanf("%d", &a[i]);
			dp[i] = max(a[i], dp[i - 1] + a[i]);
			if(a[i] < 0)	t++;
			if(a[i] == dp[i]) {
				s1 = i;	e1 = i;
			}
			else {
				e1 = i;
			}
			if(dp[i] > tttt) {
				e2 = e1;
				s2 = s1;
				tttt = dp[i];
			}
		}
		if(t == K) printf("0 %d %d\n", a[1], a[K]);
		else printf("%d %d %d\n", tttt, a[s2], a[e2]);	
	}
}

 2.

技术图片

 

 

 

#include <bits/stdc++.h>
using namespace std;
typedef pair<string, string> P;
map<string, string> MAP;
int main () {
	MAP.insert(P("zero", "0"));
	MAP.insert(P("one", "1"));
	MAP.insert(P("two", "2"));
	MAP.insert(P("three", "3"));
	MAP.insert(P("four" ,"4"));
	MAP.insert(P("five" ,"5"));
	MAP.insert(P("six", "6"));
	MAP.insert(P("seven", "7"));
	MAP.insert(P("eight", "8"));
	MAP.insert(P("nine", "9"));
	string sb;
	string t = "";
	int a, b;
	while(cin >> sb) {
		if(sb == "=") {
			//cout << t << endl;
			b = std::stoi(t);
			t = "";
			if(a == 0 && b == 0) {
				return 0;
			}
			cout << a + b << endl;
			continue;
		}
		if(sb == "+") {
			//cout << t << endl;
			a = std::stoi(t);
			t = "";
		}
		t += MAP[sb];
		// t += (MAP.find(sb)->second);
		// cout << (MAP.find(sb)->second) << endl;
	}	
}

 3.

技术图片

 

 

 

Sample Input

    2
    2
    10 10
    20 20
    3
    1 1
    2 2
    1000 1000

Sample Output

    1414.2
    oh!

 

//最小生成树 prim算法
#include <bits/stdc++.h>
using namespace std;
// const double MAXN = 0x3f3f3f3f;
#define MAXN 0xFFFFFFF
const int N = 101;
typedef pair<double, double> P;
std::vector<P> v;
double MAP[N][N];
bool vis[N];
int C; //小岛个数
double getD(P a, P b) {
	return sqrt((a.first - b.first) * (a.first - b.first) + (a.second - b.second) * (a.second - b.second));
}

void buildMap() {
	double l;
	for(int i = 0; i < C; ++i) {
		for(int j = i; j < C; ++j) {
			l = getD(v[i], v[j]);
			if(l >= 10 && l <= 1000) {
				//cout << l << endl;
				MAP[i][j] = MAP[j][i] = ((i == j) ? 0 : l);
			}
			else {
				MAP[i][j] = MAP[j][i] = MAXN;
			}
		}
	}
	// for(int i = 0 ; i < C; ++i) {
	// 	for(int j = 0; j < C; ++j) {
	// 		cout << MAP[i][j] << " ";
	// 	}
	// 	cout << endl;
	// }
}

void prim() {
	int temp = C;
	memset(vis, 0, sizeof vis);
	vis[0] = 1;
	double m;
	double sum = 0;
	int sb;
	while(--temp) {
		m = MAXN;
		for(int i = 1; i < C; ++i) {
			if(!vis[i] && MAP[0][i] < m){
				//
				m = MAP[0][i];
				sb = i;
				//cout << m << "???"<<endl;
			} 
		}
		if(m == MAXN)	break;
		vis[sb] = 1;
		// cout << m << endl;
		sum += m;
		for(int i = 1; i < C; ++i) {
			if(!vis[i] && MAP[sb][i] < MAP[0][i])
				MAP[0][i] = MAP[sb][i];
		}
	}
	//cout << temp << endl;
	if(temp == 0) {
		printf("%.1f\n", sum * 100.0);
	}
	else {
		cout << "oh!" << endl;
	}
}
int main () {
	int T;
	cin >> T;
	while(T--) {
		v.clear();
		cin >> C;
		for(int i = 0; i < C; ++i) {
			double x, y;
			cin >> x >> y;
			v.push_back(P(x, y));
		}
		buildMap();
		prim();	
	}
}

 4.
技术图片

 

 

 

Sample Input

    3
    1 2 1 0
    1 3 2 0
    2 3 4 0
    3
    1 2 1 0
    1 3 2 0
    2 3 4 1
    3
    1 2 1 0
    1 3 2 1
    2 3 4 1
    0

Sample Output

    3
    1
    0

 

//也是最小生成树 注意已经修好的路不用花钱
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 0x3fffffff;
const int N = 110;
bool vis[N];
int MAP[N][N];
int n;
int low[110];
void prim() {
	memset(vis, 0, sizeof vis);
	int ans = 0;
	int k = 0;
	vis[k] = 1;
	// for(int i = 0; i < n; ++i) {
	// 	if(!vis[i]) {
	// 		low[i] = MAP[k][i];
	// 	}
	// }
	int m;
	for(int i = 1; i < n; ++i){
		m = MAXN;
		for(int i = 0; i < n; ++i){
			if(!vis[i] && MAP[0][i] < m) {
				k = i;
				m = MAP[0][i];
			}
		}
		ans += m;
		vis[k] = 1;
		for(int i = 0; i <= n + 1; ++i) {
			if(!vis[i] && MAP[i][k] < MAP[0][i]) {
				MAP[0][i] = MAP[i][k];
			}
		}	
	}
	cout << ans << endl;
}
int main () 
{
	ios::sync_with_stdio(false);
	while(cin >> n) {
		if(!n)	break;
		int x, y, s, b;
		int t = (n - 1) * n / 2;
		while(t--){
			cin >> x >> y >> s >> b;
			if(b) {
				MAP[x-1][y-1] = MAP[y-1][x-1] = 0;
			}
			else {
				MAP[x-1][y-1] = MAP[y-1][x-1] = s;
			}
		}
		prim();
	}
}

 5.leetcode上的一道憨批题

技术图片

 

 

 

//用O(n方)时间复杂度写出来的我着实憨批
class Solution {
public:
string pushDominoes(string dominoes) {

	for(int i = 0; i < dominoes.size(); ++i) {
		if(dominoes[i] != ‘.‘ && dominoes[i] != ‘M‘ && dominoes[i] != ‘S‘) {
            continue;
        }
        int R, L;
		R = 0x3f3f3f3f; L = 0x3f3f3f3f;
        int s1, s2;
        s1 = i; s2 = i;
		char t1, t2;
		for(int j = i + 1; j < dominoes.size(); ++j) {
			if(dominoes[j] != ‘.‘ && dominoes[j] != ‘M‘ && dominoes[j] != ‘S‘) {
                if(dominoes[j] == ‘L‘){
                   	t1 = dominoes[j];
				    R = j - s1;
                }
				break;
			}
		}
        if(i == 5)
        cout << 66 << endl;
		for(int j = i - 1; j >= 0; --j) {
            if(j == 3 && i == 5) cout << dominoes[i] << endl;
			if(dominoes[j] != ‘.‘ && dominoes[j] != ‘M‘ && dominoes[j] != ‘S‘) {
				if(dominoes[j] == ‘R‘){
                    if(j == 3 && i == 5) cout << "sb" << endl;
                    t2 = dominoes[j];
                    L = s2 - j;
                }	
				break;
			}
		}
        if(i == 5) {
            cout << R << " " << L << endl;
            cout << dominoes[i] << endl;
        }
		if(R < L) {
			dominoes[i] = t1 + 1;
		}
		else if(R > L) {
			dominoes[i] = t2 + 1;
		}
		else {
			dominoes[i] = ‘.‘;
		}
	}
    for(int i = 0; i < dominoes.size(); ++i) {
        if(dominoes[i] != ‘L‘ && dominoes[i] != ‘R‘ && dominoes[i] != ‘.‘) {
             dominoes[i]--;
        }
    }
 	return dominoes;
}
};

 技术图片

 

 

 

//这是真的憨批题了
class Solution {
public:
    bool isRectangleOverlap(vector<int>& rec1, vector<int>& rec2) {
        if(rec1[2] > rec2[0] && rec1[0] < rec2[2] && rec1[3] > rec2[1] && rec1[1] < rec2[3])
            return 1;
        return 0;    
    }
};

 技术图片

 

 

//挺好的一道dp题
class Solution { public: int min(int a, int b) { return a > b ? b : a; } int numSquares(int n) { int dp[100000] = {0}; for(int i = 1; i <= n; ++i) { dp[i] = i; for(int j = 1; i - j * j >= 0; j++) { dp[i] = min(dp[i], dp[i - j * j] + 1); } } return dp[n]; } };

 

 

 

明天上午学习课程!!!!!!学习课程!!!!!!学习课程!!!!!!学习课程!!!!!!

2020/3/20 刷题

标签:put   over   define   als   pushd   size   ace   ble   clu   

原文地址:https://www.cnblogs.com/lightac/p/12521036.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!