• Codeforces Round #676 (Div. 2)


    A

    int main() {
        IOS;
        for (cin >> _; _; --_) {
            cin >> n >> m; k = 0;
    		rep (i, 0, 30)
    			if ((n >> i & 1) && (m >> i & 1)) k += 1 << i;
    		cout << (n ^ k) + (m ^ k) << '
    ';
        } 
        return 0;
    }
    

    B

    int main() {
        IOS;
        for (cin >> _; _; --_) {
                    cin >> n;
    		rep (i, 1, n) {
    			cin >> s[i] + 1;
    		}
    		vector<PII> ans;
    		if (s[1][2] == s[2][1]) {
    			if (s[n][n - 1] == s[1][2]) ans.pb({n, n - 1});
    			if (s[n - 1][n] == s[1][2]) ans.pb({n - 1, n});
    		} else if (s[n][n - 1] == s[n - 1][n]) {
    			if (s[n][n - 1] == s[1][2]) ans.pb({1, 2});
    			if (s[n - 1][n] == s[2][1]) ans.pb({2, 1});
    		} else {
    			if (s[1][2] != '0') ans.pb({1, 2});
    			if (s[2][1] != '0') ans.pb({2, 1});
    			if (s[n][n - 1] == '0') ans.pb({n, n - 1});
    			if (s[n - 1][n] == '0') ans.pb({n - 1, n});
    		}
    		cout << ans.size() << '
    ';
    		for (auto i : ans) cout << i.fi << ' ' << i.se << '
    ';
    	}
        return 0;
    }
    

    C

    操作是对称的

    想象最后一步 ABCDE "R 2"("L n - 1", 操作对称) ABCDEDCB, 正好多了个 A, 随我我们希望 C == A, 这样 就可以 "R n - 1", 形成回文

    因为给定串 ABCDE, 不能保证 A == C, 我们就要认为去 改变串的左边字符, 答案也就出来了

    3次就够了, 我傻了, 直接 "L 2", "R 2", "R 2*len - 1" 就行了, 第一步已经复制了开头了

    int main() {
        IOS; cin >> s + 1;
    	int len = strlen(s + 1);
    	cout << 4 << '
    ';
    	cout << "L " << len - 1 << '
    ';
    	cout << "L " << 2 << '
    ';
    	cout << "R " << 2 << '
    ';
    	cout << "R " << 4 * len - 5;
        return 0;
    }
    

    D

    我们先扩展坐标, 每个六边形的宽度为 2 个单位, 则扩展之后的坐标 (x, y) -> (x, y * 2 - x)

    然后找等效移动的最小值, 比如 c1 等效于 c6 + c2, 故 c1 = min(c1, c6 + c2)

    使得等效移动花费最小, 然后贪心移动

    int main() {
        IOS;
    	for (cin >> _; _; --_) {
    		ll x, y, ans = 0; cin >> x >> y; y = (y << 1) - x;
    		rep (i, 1, 6) cin >> c[i];
    		umin(c[1], c[6] + c[2]); umin(c[3], c[2] + c[4]); umin(c[4], c[3] + c[5]);
                    umin(c[6], c[1] + c[5]); umin(c[2], c[1] + c[3]); umin(c[5], c[6] + c[4]);
    		if (abs(x) >= abs(y))
    			if (x >= 0) ans += (y > 0 ? c[1] : c[6]) * abs(y) + (x - abs(y) >> 1) * (c[1] + c[6]);
    			else ans += (y > 0 ? c[3] : c[4]) * abs(y) + (-x - abs(y) >> 1) * (c[3] + c[4]);
    		else
    			if (x >= 0) ans += (y > 0 ? c[1] : c[6]) * x + (abs(y) - x >> 1) * (y > 0 ? c[2] : c[5]);
    			else ans += (y > 0 ? c[3] : c[4]) * (-x) + (abs(y) + x >> 1) * (y > 0 ? c[2] : c[5]);
    		cout << ans << '
    ';
    	}
        return 0;
    }
    

    E

  • 相关阅读:
    在OpenEuler中安装轻量化调试工具CGDB
    nginx服务器 server location映射路径配置
    hadoop HDFS文件系统角色及文件读写流程
    Linux系统Tomcat服务自启动脚本
    Linux系统软件安装的三种方式
    linux基础命令
    Java多线程解析
    多线程的典型应用场景---多个生产者多个消费者对共享资源的处理
    10.16变量的作用域和生存周期
    10.15sizeof用法
  • 原文地址:https://www.cnblogs.com/2aptx4869/p/13839141.html
Copyright © 2020-2023  润新知