• 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

  • 相关阅读:
    TCP拥塞控制算法 — CUBIC的补丁(二)
    TCP拥塞控制算法 — CUBIC的补丁(四)
    Class chart
    Class array
    Bool to int
    using in the function
    unsafe
    resources contain {0}
    Using Nullable Types
    Microsoft.Ink namespace
  • 原文地址:https://www.cnblogs.com/ooctober/p/14305188.html
Copyright © 2020-2023  润新知