zoukankan      html  css  js  c++  java
  • Codeforces Round #613 (Div. 2) 题解

    Mezo Playing Zoma

    [Time Limit: 1 squad Memory Limit: 256 MB ]

    可以到达的最左是 (-L个数),最右是 (R个数),所以答案就是相减一下。

    view
    /*************************************************************** 
        > File Name        : a.cpp
        > Author           : Jiaaaaaaaqi
        > Created Time     : 2020/1/10 22:04:03
     ***************************************************************/
    
    #include <bits/stdc++.h>
    #define  fi         first
    #define  se         second
    #define  pb         push_back
    #define  pii        pair<int, int>
    #define  dbg(x)     cout << #x << " = " << (x) << endl
    #define  mes(a, b)  memset(a, b, sizeof a)
    
    using namespace std;
    typedef long long int ll;
    typedef unsigned long long int ull;
    const int    maxn = 1e5 + 10;
    const ll     mod  = 1e9 + 7;
    const ll     INF  = 1e18 + 100;
    const int    inf  = 0x3f3f3f3f;
    const double pi   = acos(-1.0);
    const double eps  = 1e-8;
    
    int n, m;
    int cas, tol, T;
    
    char s[maxn];
    
    int main() {
    	// freopen("in", "r", stdin);
    	scanf("%d", &n);
    	scanf("%s", s+1);
    	int x = 0, y = 0;
    	for(int i=1; i<=n; i++) {
    		x -= s[i]=='L';
    		y += s[i]=='R';
    	}
    	printf("%d
    ", y-x+1);
    	return 0;
    }
    

    Just Eat It!

    [Time Limit: 1 squad Memory Limit: 256 MB ]

    对于第二个人肯定是抛弃左边一侧或者右边一侧的若干个数字,所以只需要判断是否存在前缀或者后缀小于等于0即可。

    view
    /*************************************************************** 
        > File Name        : b.cpp
        > Author           : Jiaaaaaaaqi
        > Created Time     : 2020/1/10 22:07:25
     ***************************************************************/
    
    #include <bits/stdc++.h>
    #define  fi         first
    #define  se         second
    #define  pb         push_back
    #define  pii        pair<int, int>
    #define  dbg(x)     cout << #x << " = " << (x) << endl
    #define  mes(a, b)  memset(a, b, sizeof a)
    
    using namespace std;
    typedef long long int ll;
    typedef unsigned long long int ull;
    const int    maxn = 1e5 + 10;
    const ll     mod  = 1e9 + 7;
    const ll     INF  = 1e18 + 100;
    const int    inf  = 0x3f3f3f3f;
    const double pi   = acos(-1.0);
    const double eps  = 1e-8;
    
    int n, m;
    int cas, tol, T;
    
    int a[maxn];
    
    bool solve() {
    	ll ans = 0;
    	for(int i=1; i<=n; i++) {
    		ans += a[i];
    		if(ans <= 0)	return false;
    	}
    	ans = 0;
    	for(int i=n; i>=1; i--) {
    		ans += a[i];
    		if(ans <= 0)	return false;
    	}
    	return true;
    }
    
    int main() {
    	// freopen("in", "r", stdin);
    	scanf("%d", &T);
    	while(T--) {
    		scanf("%d", &n);
    		for(int i=1; i<=n; i++) {
    			scanf("%d", &a[i]);
    		}
    		puts(solve() ? "YES" : "NO");
    	}
    	return 0;
    }
    

    Fadi and LCM

    [Time Limit: 1 squad Memory Limit: 256 MB ]

    先质因子分解,然后就得到了若干个数把他们分配到两个数字上,由于数字只会有 (11) 个,因为前 (12) 个素数相乘就超过 (1e12) 了,所以可以直接暴力状压或者暴力 (01) 背包。

    view
    /*************************************************************** 
        > File Name        : c.cpp
        > Author           : Jiaaaaaaaqi
        > Created Time     : 2020/1/10 22:13:23
     ***************************************************************/
    
    #include <bits/stdc++.h>
    #define  fi         first
    #define  se         second
    #define  pb         push_back
    #define  pii        pair<int, int>
    #define  dbg(x)     cout << #x << " = " << (x) << endl
    #define  mes(a, b)  memset(a, b, sizeof a)
    
    using namespace std;
    typedef long long int ll;
    typedef unsigned long long int ull;
    const int    maxn = 1e6 + 10;
    const ll     mod  = 1e9 + 7;
    const ll     INF  = 1e18 + 100;
    const int    inf  = 0x3f3f3f3f;
    const double pi   = acos(-1.0);
    const double eps  = 1e-8;
    
    ll n, m;
    int cas, tol, T;
    
    bool dp[maxn];
    
    int main() {
    	// freopen("in", "r", stdin);
    	scanf("%lld", &n);
    	vector<ll> g;
    	for(ll i=2; i*i<=n; i++) {
    		if(n%i==0) {
    			ll res = 1;
    			while(n%i==0) {
    				res *= i;
    				n /= i;
    			}
    			g.pb(res);
    		}
    	}
    	if(n!=1)	g.pb(n);
    	g.pb(1);
    	sort(g.begin(), g.end());
    	tol = g.size();
    	ll ans = 1;
    	for(int i=0; i<tol; i++)	ans *= g[i];
    	ll n = 0;
    	for(; n*n<=ans; n++);
    	mes(dp, 0);
    	dp[1] = 1;
    	for(int i=0; i<tol; i++) {
    		for(ll j=n-1; j>0; j--) {
    			if(j%g[i]==0)	dp[j] |= dp[j/g[i]];
    		}
    	}
    	for(ll i=n-1; i>0; i--) {
    		if(dp[i])	return 0*printf("%lld %lld
    ", i, ans/i);
    	}
    	return 0;
    }
    

    Dr. Evil Underscores

    [Time Limit: 1 squad Memory Limit: 256 MB ]

    先建 (01) 字典树,然后从高位到低位开始贪心,如果字典树某个节点同时存在 (0)(1) 的边,那么不管 (X) 这一位是 (0) 或者 (1),总会与一个数字 (xor) 出来后,这一位为 (1),其他情况都可以使这一位为 (0),一直贪心到根即可。

    view
    /*************************************************************** 
        > File Name        : d.cpp
        > Author           : Jiaaaaaaaqi
        > Created Time     : 2020/1/10 22:53:46
     ***************************************************************/
    
    #include <bits/stdc++.h>
    #define  fi         first
    #define  se         second
    #define  pb         push_back
    #define  pii        pair<int, int>
    #define  dbg(x)     cout << #x << " = " << (x) << endl
    #define  mes(a, b)  memset(a, b, sizeof a)
    
    using namespace std;
    typedef long long int ll;
    typedef unsigned long long int ull;
    const int    maxn = 1e5 + 10;
    const ll     mod  = 1e9 + 7;
    const ll     INF  = 1e18 + 100;
    const int    inf  = 0x3f3f3f3f;
    const double pi   = acos(-1.0);
    const double eps  = 1e-8;
    
    int n, m;
    int cas, tol, T;
    
    int a[maxn];
    int node[maxn*30][2];
    
    void insert(int x) {
    	int root = 0;
    	for(int i=30; i>=1; i--) {
    		int k = x&(1ll<<(i-1)) ? 1 : 0;
    		if(node[root][k]==0) {
    			mes(node[++tol], 0);
    			node[root][k] = tol;
    		}
    		root = node[root][k];
    	}
    }
    
    ll dfs(int root, int deep) {
    	if(deep == 0)	return 0;
    	ll ans = 0;
    	if(node[root][0] && node[root][1])	
    		ans += (1ll<<(deep-1));
    	ll tmp = INF;
    	if(node[root][0])	tmp = min(tmp, dfs(node[root][0], deep-1));
    	if(node[root][1])	tmp = min(tmp, dfs(node[root][1], deep-1));
    	return tmp+ans;
    }
    
    int main() {
    	// freopen("in", "r", stdin);
    	tol = 0;
    	scanf("%d", &n);
    	for(int i=1; i<=n; i++) {
    		scanf("%d", &a[i]);
    		insert(a[i]);
    	}
    	ll ans = dfs(0, 30);
    	printf("%lld
    ", ans);
    	return 0;
    }
    
  • 相关阅读:
    Linux-Rsync命令参数详解
    Linux-iptables(2)
    Linux-iptables
    Linux-awk command
    Linux-sed command
    Linux-tomcat
    C#调用默认浏览器打开网页的几种方法
    个人记录用
    .NET中的Request
    sql标量值函数,将汉字转化为拼音,无音标
  • 原文地址:https://www.cnblogs.com/Jiaaaaaaaqi/p/12184716.html
Copyright © 2011-2022 走看看