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

    CF的rating设置改了。。人太多了,决定开小号打,果然是明智的选择!

    水 A - Olesya and Rodion

    #include <bits/stdc++.h>
    using namespace std;
    
    typedef long long ll;
    const int N = 1e5 + 10;
    const int INF = 0x3f3f3f3f;
    
    int main(void)	{
        int n, t;	scanf ("%d%d", &n, &t);
        if (t == 10)	{
    		if (n == 1)	{
    			puts ("-1");
    		}
    		else	{
    			for (int i=1; i<n; ++i)	printf ("1");
    			puts ("0");
    		}
        }
        else	{
    		for (int i=1; i<=n; ++i)	{
    			printf ("%d", t);
    		}
    		puts ("");
        }
    
    	return 0;
    }
    

    组合数学 B - Kolya and Tanya

    题意:有一个3n的圈,每个数字可以在[1, 3]中选择,问ai + ai+n + ai+2n != 6的方案数

    分析:3n个点,每个点都有3种选择,而出现ai + ai+n + ai+2n != 6的组合有7种,i的位置有n种,所以答案就是:(3 ^ (3 * n) - 7 ^ (n) + MOD) % MOD

    还好猜猜样例一次过掉,否则一旦卡住就不会出后面的两题了

    #include <bits/stdc++.h>
    using namespace std;
    
    typedef long long ll;
    const int N = 1e5 + 10;
    const int INF = 0x3f3f3f3f;
    const int MOD = 1e9 + 7;
    
    int pow_mod(int x, int n, int p)	{
    	int ret = 1;
    	while (n)	{
    		if (n & 1)	{
    			ret = 1ll * ret * x % p;
    		}
    		x = 1ll * x * x % p;
    		n >>= 1;
    	}
    	return ret;
    }
    
    int main(void)	{
    	int n;	scanf ("%d", &n);
    	if (n == 1)	{
    		printf ("20
    ");
    	}
    	else
    		printf ("%d
    ", (pow_mod (3, n * 3, MOD) - pow_mod (7, n, MOD) + MOD) % MOD);
    
    	return 0;
    }
    

      

    构造 C - Marina and Vasya

    题意:问是否有一个字符串和字符串a的不同个数与和字符串b的不同个数相同

    分析:将a和b的字符比较,得到它们相同的个数以及不同的个数,不同的那块可以选择与它们都不同的或者与其中一个相同的,可以自由分配,相同的那块只能相同或都不同

    #include <bits/stdc++.h>
    using namespace std;
    
    typedef long long ll;
    const int N = 1e5 + 10;
    const int INF = 0x3f3f3f3f;
    char s[N], t[N];
    
    char f(char a, char b)	{
    	if (a > b)	swap (a, b);
    	char r = a + 1;
    	if (r == b)	r++;
    	if (r > 'z')	r = 'a';
    	return r;
    }
    
    int main(void)	{
    	int n, m;	scanf ("%d%d", &n, &m);
    	scanf ("%s%s", s, t);
    	int dif = 0;
    	for (int i=0; i<n; ++i)	{
    		if (s[i] != t[i])	dif++;
    	}
    	int low = dif / 2;
    	if (dif & 1)	low++;
    	if (low > m)	puts ("-1");
    	else	{
    		if (m >= dif)	{
    			int sam = m - dif;
    			for (int i=0; i<n; ++i)	{
    				if (s[i] == t[i])	{
    					printf ("%c", sam > 0 ? f (s[i], t[i]) : s[i]);
    					sam--;
    				}
    				else	{
    					printf ("%c", f (s[i], t[i]));
    				}
    			}
    			puts ("");
    		}
    		else	{
    			int sam = (dif - m) * 2;
    			for (int i=0; i<n; ++i)	{
    				if (s[i] == t[i])	{
    					printf ("%c", s[i]);
    				}
    				else	{
    					if (sam <= 0)	printf ("%c", f (s[i], t[i]));
    					else
    						printf ("%c", sam & 1 ? s[i] : t[i]);
    					sam--;
    				}
    			}
    			puts ("");
    		}
    	}
    
    	return 0;
    }
    

      

    素数 D - Dima and Lisa

    题意:略

    分析:一个或两个很好想,三个没什么好办法,用哥德巴赫猜想,只能暴力来~

    #include <bits/stdc++.h>
    using namespace std;
    
    typedef long long ll;
    const int N = 1e5 + 10;
    const int INF = 0x3f3f3f3f;
    
    /*
        素性测试,在小范围(1e5)内判素数个数以及单个数判素数有奇效,不适用于大范围判素数
    */
    bool is_prime(int x)    {
        if (x == 2 || x == 3)   return true;
        if (x % 6 != 1 && x % 6 != 5)   return false;
        for (int i=5; i*i<=x; i+=6) {
            if (x % i == 0 || x % (i + 2) == 0) return false;
        }
        return true;
    }
    
    
    int main(void)	{
    	int n;	scanf ("%d", &n);
    	if (is_prime (n))	{
    		printf ("1
    %d
    ", n);
    	}
    	else	{
            int x = n - 2;
            if (is_prime (x))	{
    			printf ("2
    %d %d
    ", 2, x);
            }
            else	{
    			int k = n - 1;
    			while (true)	{
    				if (is_prime (k))	break;
    				k--;
    			}
    			n -= k;	//n >= 9
    			int a = n / 2;
    			while (a < n)	{
    				if (is_prime (a) && is_prime (n - a))	{
    					printf ("3
    %d %d %d
    ", k, a, n - a);	return 0;
    				}
    				a++;
    			}
            }
    	}
    
    	return 0;
    }
    

      

    编译人生,运行世界!
  • 相关阅读:
    PAT顶级 1024 Currency Exchange Centers (35分)(最小生成树)
    Codeforces 1282B2 K for the Price of One (Hard Version)
    1023 Have Fun with Numbers (20)
    1005 Spell It Right (20)
    1092 To Buy or Not to Buy (20)
    1118 Birds in Forest (25)
    1130 Infix Expression (25)
    1085 Perfect Sequence (25)
    1109 Group Photo (25)
    1073 Scientific Notation (20)
  • 原文地址:https://www.cnblogs.com/Running-Time/p/4861509.html
Copyright © 2011-2022 走看看