zoukankan      html  css  js  c++  java
  • BestCoder Round #78 (div.2)

    因为rating不够QAQ就报了Div2。。

    [CA Loves Stick]

    CA喜欢玩木棍。
    有一天他获得了四根木棍,他想知道用这些木棍能不能拼成一个四边形。
    Sample Input
    2
    1 1 1 1
    1 1 9 2
    Sample Output
    Yes
    No

    CE的心塞啊。。居然没有<bits/stdc++.h>

    #include <cstdio>
    #include <algorithm>
    #include <iostream>
    
    using namespace std;
    
    typedef unsigned long long ll;
    ll a[4];
    int main(){
    	int test;
    	scanf("%d", &test);
    	while(test --){
    		for(int i = 0; i < 4; i ++)
    		    cin >> a[i];
    		sort(a, a+4);
    		bool flag = true;
    		for(int i = 0; i < 4; i ++)
    		    if(a[i] == 0){
    				flag = false;
    				break;
    		    }
    		if(flag == false || a[3] - a[2] >= a[0] + a[1])
    		    puts("No");
    		else puts("Yes");
    	}
    	return 0;
    }
    

    [CA Loves GCD]

    问题描述
    CA喜欢是一个热爱党和人民的优秀同♂志,所以他也非常喜欢GCD(请在输入法中输入GCD得到CA喜欢GCD的原因)。
    现在他有N个不同的数,每次他会从中选出若干个(至少一个数),求出所有数的GCD然后放回去。
    为了使自己不会无聊,CA会把每种不同的选法都选一遍,CA想知道他得到的所有GCD的和是多少。
    我们认为两种选法不同,当且仅当有一个数在其中一种选法中被选中了,而在另外一种选法中没有被选中。
    输入样例
    2
    2
    2 4
    3
    1 2 3
    输出样例
    8
    10

    枚举因子,容斥,还是蛮简单的。。(也不知道是谁调了很久都没调出来)

    可以做到O(nlogn).然而手残写的O(n^2)

    #include <cstdio>
    #include <algorithm>
    #include <iostream>
    #include <cstring>
    #define maxn 1010
    using namespace std;
    typedef long long ll;
    #define mod 100000007
    
    int a[maxn], n;
    
    ll ans[maxn], pow2[maxn];
    
    int main(){
    	int test;
    	scanf("%d", &test);
    	pow2[0] = 1;
    	for(int i = 1; i <= 1000; i ++)
    	    pow2[i] = (pow2[i-1] << 1) % mod;
    	while(test --){
    		scanf("%d", &n);
    		int mx = 0;
    		for(int i = 1; i <= n; i ++)
    		    scanf("%d", &a[i]), mx = max(mx, a[i]);
    		sort(a+1, a+1+n);
    		memset(ans, 0, sizeof ans);
    		for(int i = 1; i <= mx; i ++){
    			int cnt = 0;
    			for(int j = 1; j <= n; j ++)
    			    cnt += a[j] % i == 0;
    			ans[i] = pow2[cnt] - 1;
    		}
    		    
    		for(int i = mx; i; i --)
    			for(int j = i + i; j <= mx; j += i)
    				ans[i] -= ans[j], ans[i] %= mod;
    
    		ll ret = 0;
    		for(int i = 1; i <= mx; i ++)
    		    ret += 1ll * ans[i] * i, ret %= mod;
    
    		printf("%I64d
    ", (ret + mod) % mod);
    	}
    	return 0;
    }
    
    [CA Loves Palindromic]
    CA喜欢字符串,尤其喜欢回文串。 有一天他得到一个字符串,他想知道子串中有多少回文子串,本质相同位置不同的算一种。每次给个区间[l, r]

    然后就是PAM。。枚举l暴力构建PAM。。

    因为len<=1000还蛮小的QAQ

    #include <cstdio>
    #include <algorithm>
    #include <iostream>
    #include <cstring>
    #define maxn 2010
    using namespace std;
    
    
    int n, s[maxn];
    
    char str[maxn];
    
    struct Node{
    	int fail, nxt[26], len;
    	void clear(){
    		memset(nxt, 0, sizeof nxt);
    		len = fail = 0;
    	}
    }st[maxn];
    
    int last, size, len;
    
    void init(){
    	last = len = 0;
    	st[0].clear(), st[1].clear();
    	st[0].len = 0, st[1].len = -1;
    	st[0].fail = st[1].fail = 1;
    	s[0] = -1; size = 1;
    }
    
    int get_fail(int x){
    	while(s[len-st[x].len-1] != s[len])
    	    x = st[x].fail;
    	return x;
    }
    
    int sz[maxn];
    
    void Extend(int c){
    	s[++ len] = c;
    	int cur = get_fail(last);
    	if(!st[cur].nxt[c]){
    		int now = ++ size;st[now].clear();
    		st[now].len = st[cur].len + 2;
    		st[now].fail = st[get_fail(st[cur].fail)].nxt[c];
    		st[cur].nxt[c] = now;
    	}
    	last = st[cur].nxt[c];
    }
    
    int ans[maxn][maxn];
    
    void solve(){
    	for(int i = 1; i <= n; i ++){
            init();
            for(int j = i; j <= n; j ++){
    			Extend(str[j]-'a');
    			ans[i][j] = size - 1;
    		}
    	}
    }
    
    void read(int& num){
    	char ch = getchar(); num = 0;
    	for(; ch < '!'; ch = getchar());
    	for(; ch > '!'; ch = getchar())
    	    num = (num << 1) + (num << 3) + (ch ^ 48);
    }
    
    int main(){
    	int test;
    	scanf("%d", &test);
    	while(test --){
    		init();
    		scanf("%s", str+1);
    		n = strlen(str+1);
    		solve();
    		int Q, l, r;
    		read(Q);
    		for(int i = 1; i <= Q; i ++){
    			read(l), read(r);
    			printf("%d
    ", ans[l][r]);
    		}
    	}
    
    	return 0;
    }
    

      

      

    给时光以生命,而不是给生命以时光。
  • 相关阅读:
    selector
    c# word 转pdf 导出失败,因为此功能尚未安装
    Jquery
    Enter
    获取当前地址的参数值
    无法向会话状态服务器发出会话状态请求。
    Ajax 跨域请求
    JsonResult 处理时间格式
    VS2013打开项目提示"Asp.net4.5未在web服务器上注册
    死锁
  • 原文地址:https://www.cnblogs.com/Candyouth/p/5348321.html
Copyright © 2011-2022 走看看