zoukankan      html  css  js  c++  java
  • AtCoder Beginner Contest 186

    A Brick

    
    int n, m;
    int main()
    {
    	scanf("%d%d", &n, &m);
    	printf("%d
    ", n / m);	
    	return 0;
    } 
    

    B Blocks on Grid

    
    int n, m;
    int a[N][N];
    int main()
    {
    	int sum = 0x3f3f3f3f;
    
    	scanf("%d%d", &n, &m);
    	for(int i = 1; i <= n; ++ i) 
    		for(int j = 1; j <= m; ++ j)
    		{
    			scanf("%d", &a[i][j]);
    			sum = min(sum, a[i][j]);
    		}
    	int res = 0;
    	for(int i = 1; i <= n; ++ i) 
    		for(int j = 1; j <= m; ++ j)
    		{
    			res += a[i][j] - sum;
    		}
    	printf("%d
    ", res);
    	return 0;
    } 
    

    C Unlucky 7

    
    bool check(int x)
    {
    	int t = x;
    	while(x) 
    	{
    		if(x % 10 == 7) return 1;
    		x /= 10;
    	}
    	while(t)
    	{
    		if(t % 8 == 7) return 1; 
    		t /= 8;
    	}
    	return 0;
    }
    
    int main()
    {
    	scanf("%d", &n);
    	int res = 0;
    	for(int i = 7; i <= n; ++ i)
    		if(check(i)) res ++;
    	printf("%d
    ", n - res);
    	return 0;
    } 
    

    D Sum of difference

    
    int n;
    int a[SZ], b[SZ];
    int main()
    {
    	LL sum = 0;
    	scanf("%d", &n);
    	for(int i = 1; i <= n; ++ i) 
    		scanf("%d", &a[i]);
    	sort(a + 1, a + n + 1);
    	for(int i = 1; i <= n; ++ i)
    		sum += (LL)a[i] * (2 * i - 1 - n);
    	printf("%lld
    ", sum);
    	return 0;
    } 
    

    E Throne

    (s + k * x = n * y)

    
    int n, s, k;
    LL exgcd(LL a, LL b, LL &x, LL &y)
    {
    	if(!b) 
    	{
    		x = 1, y = 0;
    		return a;
    	} 
    	LL d = exgcd(b, a % b, y, x);
    	y -= a / b * x;
    	return d;
    }
    
    int main()
    {
    	int __;
    	scanf("%d", &__);
    	while(__ -- )
    	{
    		LL x, y;
    		scanf("%d%d%d", &n, &s, &k);
    		LL d = exgcd(k, n, x, y);
    		if(s % d) puts("-1");
    		else 
    		{
    			x *= - s / d;
    			LL t = abs(n / d);
    			printf("%lld
    ", (x % t + t) % t);
    		}
    	}
    	return 0;
    } 
    

    F Rook on Grid

    每一次移动可以往下或往右走任意步数,但遇到墙要停,初始位置在(1,1),问走两步以内能够覆盖的路径有多少个格子.
    首先考虑第一步向下走,把第二步向右走可以到达的位置统计。
    然后考虑第一步向右走,第二步向下走且第一种情况未到达的位置:
    即到当前列第一个障碍这些行中,在前面列出现障碍的行数,统计完后把当前列的障碍更新上去,可以用一个树状数组维护.

    
    int tr[N];
    int n, m, k;
    int row[N];
    int column[N];
    vector<int> v[N];
    
    int lowbit(int x) { return x & -x; }
    
    void add(int x, int v) { for(int i = x; i <= n; i += lowbit(i)) tr[i] += v; }
    
    int query(int x) { int res = 0; for(int i = x; i; i -= lowbit(i)) res += tr[i]; return res; }
    
    int main()
    {
    	scanf("%d%d%d", &n, &m, &k);
    	for(int i = 1; i <= n; ++ i) row[i] = m + 1;
    	for(int i = 1; i <= m; ++ i) column[i] = n + 1;
    	for(int i = 1; i <= k; ++ i)
    	{
    		int x, y;
    		scanf("%d%d", &x, &y);
    		row[x] = min(row[x], y);
    		column[y] = min(column[y], x);
    	}
    	LL res = 0;
    	int flag = 0;
    	for(int i = 1; i <= n; ++ i)
    	{
    		if(flag == 1) { row[i] = 1; continue; }
    		if(row[i] == 1) { flag = 1; continue; }
    		res += row[i] - 1; 
    	}
    	for(int i = 1; i <= n; ++ i) v[row[i]].push_back(i);
    	for(int i = 1; i <= m; ++ i)
    	{
    		if(column[i] == 1) break;
    		res += query(column[i] - 1);
    		for(auto j: v[i]) add(j, 1);
    	}
    	printf("%lld
    ", res);
    	return 0;
    } 
    

    2021.1.20

  • 相关阅读:
    【面积并】 Atlantis
    【动态前k大 贪心】 Gone Fishing
    【复杂枚举】 library
    【双端队列bfs 网格图建图】拯救大兵瑞恩
    【奇偶传递关系 边带权】 奇偶游戏
    【权值并查集】 supermarket
    CF w4d3 A. Pythagorean Theorem II
    CF w4d2 C. Purification
    CF w4d2 B. Road Construction
    CF w4d2 A. Cakeminator
  • 原文地址:https://www.cnblogs.com/ooctober/p/14305188.html
Copyright © 2011-2022 走看看