Codeforces Round #511 (Div. 2)

又到了摸鱼的时候了23333

A. Little C Loves 3 I

题意:给一个数,分解为不被3整除的3个数

题解:构造,如果这个数被3整除,就构造为1,1,n-2;否则构造为1,2,n-3

 1 class Solution(object):
 2     def run(self):
 3         n = int(input())
 4         if n % 3 == 0:
 5             print(1, 1, n - 2)
 6         else:
 7             print(1, 2, n - 3)
 8     
 9 if __name__ == '__main__':
10     Solution().run()
View Code

 

B. Cover Points

题意:用一个直角边为xy轴的等腰三角形覆盖坐标系上的点,问直角边长度

题解:不是等腰还有点意思,等腰就是大水题

 1 class Solution(object):
 2     def run(self):
 3         n = int(input())
 4         res = 0
 5         for _ in range(n):
 6             p = [int(x) for x in input().split(' ')]
 7             x, y = p[0], p[1]
 8             res = max(res, x + y)
 9         print(res)
10     
11 if __name__ == '__main__':
12     Solution().run()
View Code

 

C. Enlarge GCD

题意:从n个数中去掉x个,使GCD严格增大,求x的最小值

题解:将所有数的因子计数,记做cnt[],cnt[k] 表示有因子 k 的数的个数;很显然,当 k0 为所有数的gcd时,cnt[k0] 应该为 n;不难想出,留下的数的个数应该为 cnt[] 中第二大的那一个,Sure,第一大的是 cnt[k0] = n

Python读入就超时了 TvT

 1 #include <iostream>
 2 #include <vector>
 3 #include <cmath>
 4 
 5 std::vector<int> a((int)3e5+1), cnt((int)2e7);
 6 
 7 int main()
 8 {
 9     int n, mx = -1, mxx = -1;
10     std::cin >> n;
11     for (auto i = 0; i < n; i++)
12     {
13         std::cin >> a[i];
14         mxx = std::fmax(mxx, a[i]);
15         for (auto j = 1; j * j <= a[i] && n * j < (int)1.5e7 + 1; j++)
16             if (a[i] % j == 0)
17             {
18                 cnt[j]++;
19                 if (j * j != a[i])
20                     cnt[a[i] / j]++;
21             }
22     }
23     for (auto i = 2; i <= mxx; i++)
24         if (cnt[i] < n)
25             mx = std::fmax(mx, cnt[i]);
26     if (mx > 0)
27         std::cout << n - mx << std::endl;
28     else
29         std::cout << -1 << std::endl;
30     return 0;
31 }
View Code

 

D. Little C Loves 3 II

题意:在一个n*m的棋盘里,尽可能多地放入曼哈顿距离为3的棋子对,问最多能放几个棋子

题解:分类讨论,然后总结一下,这题相当水

 1 class Solution(object):
 2     def run(self):
 3         n, m = [int(x) for x in input().split()]
 4         if n > m:
 5             n, m = m, n
 6         res = (n * m) // 2
 7         if n == 1 and (m + 1) % 6 // 3:
 8             res -= 1
 9         elif n == 2:
10             if m == 2:
11                 res = 0
12             elif m == 3:
13                 res = 2
14             elif m == 7:
15                 res = 6
16         print(res * 2)
17 
18 if __name__ == '__main__':
19     Solution().run()
View Code

 

E

摸了

posted @ 2018-09-22 16:27  Backlight8891  阅读(212)  评论(0编辑  收藏  举报