zoukankan      html  css  js  c++  java
  • Daliy Algorithm (cf , GPLT )-- day 90

    Nothing to fear


    种一棵树最好的时间是十年前,其次是现在!

    那些你早出晚归付出的刻苦努力,你不想训练,当你觉的太累了但还是要咬牙坚持的时候,那就是在追逐梦想,不要在意终点有什么,要享受路途的过程,或许你不能成就梦想,但一定会有更伟大的事情随之而来。 mamba out~

    2020.6.28


    人一我十,人十我百,追逐青春的梦想,怀着自信的心,永不言弃!

    GPLT-L2-009 抢红包

    1. 如果出现double类型进行比较大小可能是坑,尽可能想办法根据题意看能否
      转化为int类型进行比较
    2. 使用vecotr容器在pat中更好使
    #include <iostream>
    #include <algorithm>
    #include <cstdio>
    #include <cstring>
    #include <vector>
    
    using namespace std;
    const int N = 10005;
    
    int n;
    struct node{
    	int id;
    	int money; //元位单位
    	int cnt;
    };
    
    bool vis[N];
    
    bool cmp(node a,node b)
    {
    	if(a.money != b.money)return a.money > b.money;
    	else if(a.cnt != b.cnt)return a.cnt > b.cnt;
    	else return a.id < b.id;
    }
    int main()
    {
    	cin >> n;
    	vector<node> ans(n + 1);
    	for(int who = 1;who <= n;who ++)
    	{
    		int k , id ,mount;
    		cin >> k;
    		ans[who].id = who;
    		for(int i = 0;i < k;i ++)
    		{
    			cin >> id >> mount;
    			if(!vis[id])
    			{
    				ans[id].money += mount ;
    				ans[who].money -= mount;
    				ans[id].cnt++;
    			}
    			vis[id] = true; 
    		}
    		memset(vis , 0 , sizeof vis);
    	}
    	sort(ans.begin() + 1, ans.end(), cmp);
    	for(int i = 1;i <= n;i ++)
    	{
    		printf("%d %.2f
    ",ans[i].id, (double)ans[i].money * 1.0 / 100);
    	}
    	return 0;
    }
    

    GPLT -L2-010 排座位

    思路: 根据输入的信息建立图模型
    利用一个二维数组直接存两个客人之间的关系。

    如果两个人关系为敌人时,需要检测一下两个人是否存在共同的朋友
    此时用dfs去检查一下从一个点能够只走关系为1的边走到目标那里即可

    #include <iostream>
    #include <cstdio>
    #include <algorithm>
    #include <cstring>
    #include <string>
    #include <vector>
    
    using namespace std;
    const int N = 105;
    vector<int> mapp[N];
    int g[N][N];
    int n , m , k;
    
    bool vis[N];
    void check(int s, int t, bool &flag)
    {
    	if(s == t){
    		flag = true;
    		return;
    	}
    	for(int i = 0;i < mapp[s].size();i ++)
    	{
    		int next = mapp[s][i];
    		if(!vis[next] && g[s][next] == 1 && !flag)
    		{
    			vis[next] = 1;
    			check(next , t , flag);
    			vis[next] = 0;
    		}
    	}
    }
    
    int main()
    {	
    	cin >> n >> m >> k;
    	for(int i = 0;i < m;i ++)
    	{
    		int a , b , c;
    		scanf("%d %d %d",&a , & b, &c);
    		g[a][b] = c;g[b][a] = c;
    		mapp[a].push_back(b);
    		mapp[b].push_back(a);
    	}
    	for(int i = 0;i < k;i ++)
    	{
    		int a, b;
    		scanf("%d %d",&a , &b);
    		if(g[a][b] == 1)
    			printf("No problem
    ");
    		if(g[a][b] == 0)
    			printf("OK
    ");
    		if(g[a][b] == -1)
    		{
    			bool flag = false;
    			check(a , b , flag);
    			if(flag)
    			{
    				printf("OK but...
    ");
    			}else printf("No way
    ");
    		}
    	}
    	return 0;
    }
    

    GPLT-L2-011 玩转二叉树

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    #include <vector>
    #include <queue>
    
    using namespace std;
    
    struct node{
    	int val;
    	struct node *left = NULL;
    	struct node *right = NULL;
    };
    int n;
    vector<int> in , pre, level;
    int find(int x)
    {
    	for(int i = 0;i < in.size();i++)
    	{
    		if(x == in[i])return i;
    	}
    }
    node* build(int x,int y,int p,int q)
    {
    	if(x > y || p > q)return NULL;
    	int i = find(pre[x]); // 在中序遍历中找到当前先序区间中的第一个
    	int k = i - p;
    	node *now = new node;
    	now->val = pre[x];
    	now->right = build(x + 1, x + k, p , i - 1);
    	now->left = build(x + k + 1, y, i + 1,  q);
    	return now;
    }
    
    
    void bfs(node *root)
    {
    	queue<node*> q;
    	q.push(root);
    	while(!q.empty())
    	{
    		node *now = q.front();q.pop();
    		level.push_back(now->val);
    		if(now->left != NULL)q.push(now->left);
    		if(now->right != NULL)q.push(now->right);
    	}
    	return;
    }
    
    int main()
    {
    	cin >> n;
    	in.resize(n),pre.resize(n);
    	for(int i = 0;i < n;i ++)
    		cin >> in[i];
    	for(int i = 0;i < n;i ++)
    		cin >> pre[i];
    	node *tree = build(0, n-1,0,n-1);
    	bfs(tree);
    	for(int i = 0;i < n;i ++)
    	{
    		if(i == 0)printf("%d",level[i]);
    		else printf(" %d",level[i]);
    	}
    	return 0;
    }
    

    650Div3 A

    #include <iostream>
    #include <cstdio>
    #include <algorithm>
    #include <cstdlib>
    #include <cstring>
    #include <vector>
    #include <cassert>
    #include <string>
    #include <iomanip>
    #include <cmath>
    #include <ctime>
    #define SIS std::ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
    #define lowbit(x) (x & -x)
    using namespace std;
    typedef long long ll;
    const int MAX = 1e+9;
    int t;
    
    void slove()
    {
    	ll x , y , n;
    	cin >> x >> y >> n;
    	ll l = 0, r = MAX;
    	while(l < r)
    	{
    		ll mid = l + r + 1>> 1;
    		if(mid * x + y <= n)l = mid;
    		else r = mid - 1;
    	}	
    	cout << l * x + y << endl;	
    }
    int main()
    {
    #ifdef LOCAL
    	auto start_time = clock();
    	cerr << setprecision(3) << fixed; // 在iomanip中
    #endif
    	SIS;
    	cin >> t;
    	while(t--)
    	{
    		slove();
    	}
    #ifdef LOCAL
    	auto end_time = clock();
    	cerr << "Execution time: " << (end_time - start_time) * (int)1e3 / CLOCKS_PER_SEC << " ms
    ";
    #endif
    }
    

    650Div3 B

    #include <iostream>
    #include <cstdio>
    #include <algorithm>
    #include <cstdlib>
    #include <cstring>
    #include <vector>
    #include <cassert>
    #include <string>
    #include <iomanip>
    #include <cmath>
    #include <ctime>
    #define SIS std::ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
    #define lowbit(x) (x & -x)
    using namespace std;
    typedef long long ll;
    const int MAX = 0x7ffffff;
    int t;
    
    void slove()
    {
    	int n;
    	cin >> n;
    	int ans = 0;
    	while(n != 1)
    	{
    		while(n % 6 == 0)
    		{
    			n /= 6;
    			ans++;
    		}
    		int cnt = 0;
    		while(n % 6 != 0 && n != 1)
    		{
    			cnt++;n *= 2;
    			if(cnt > 1){
    				cout << -1 << endl;
    				return;
    			}
    			ans++;
    		}
    	}
    	cout << ans << endl;
    }
    int main()
    {
    #ifdef LOCAL
    	auto start_time = clock();
    	cerr << setprecision(3) << fixed; // 在iomanip中
    #endif
    	SIS;
    	cin >> t;
    	while(t--)
    	{
    		slove();
    	}
    #ifdef LOCAL
    	auto end_time = clock();
    	cerr << "Execution time: " << (end_time - start_time) * (int)1e3 / CLOCKS_PER_SEC << " ms
    ";
    #endif
    }
    

    650Div3 C

    手生的一批

    #include <iostream>
    #include <cstdio>
    #include <algorithm>
    #include <cstdlib>
    #include <cstring>
    #include <vector>
    #include <cassert>
    #include <string>
    #include <iomanip>
    #include <cmath>
    #include <ctime>
    #include <map>
    
    #define SIS std::ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
    #define lowbit(x) (x & -x)
    using namespace std;
    typedef long long ll;
    const int MAX = 0x7ffffff;
    int t , n;
    void slove()
    { 
    	int n;
    	string s;
    	cin >> n >> s;
    	int ans = 0 , cnt = 0;
    	for(char c : s)
    	{
    		cnt += (c == ')' ? 1 : -1);
    		ans = max(ans , cnt);
    	}
    	cout << ans << endl;
    }
    int main()
    {
    #ifdef LOCAL
    	auto start_time = clock();
    	cerr << setprecision(3) << fixed; // 在iomanip中
    #endif
    	SIS;
    	cin >> t;
    	while(t--)
    	{
    		slove();
    	}
    #ifdef LOCAL
    	auto end_time = clock();
    	cerr << "Execution time: " << (end_time - start_time) * (int)1e3 / CLOCKS_PER_SEC << " ms
    ";
    #endif
    }
    
  • 相关阅读:
    电源设计考虑的问题
    板级隔离电源
    浪涌特性
    LED
    电荷泵
    ps抠图
    cadence pcb 导入logo
    allegro pcb 设置快捷键
    【成长】今天,我也是个面试官(BIOS面试)
    【成长】---一枚研发狗的自我认知历程
  • 原文地址:https://www.cnblogs.com/wlw-x/p/13206372.html
Copyright © 2011-2022 走看看