国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

CF 778B Bitwise Formula 位運算,貪心

2019-11-06 06:10:48
字體:
來源:轉載
供稿:網友

題目鏈接:這里 題意:選擇一個 m 位的二進制數字,總分為 n 個算式的答案之和。問得到最低分和最高分分別應該取哪個二進制數字 解法:因為所有數字都是m位的,因為高位的權重大于地位 ,我們就從高到低考慮 ans 的每一位是取 0 還是取 1,統計該位的權重(即n個式子該位結果之和)即可。

//CF 779E#include <bits/stdc++.h>using namespace std;const int maxn = 5005;map <string, int> mp;struct Q{ string s; int num, a, b, op; Q(){} Q(string s, int num, int a, int b, int op) : s(s), num(num), a(a), b(b), op(op) {}}q[maxn];int n, m;int cal(int x, int p){ q[0].num = p; int ans = 0; for(int i = 1; i <= n; i++){ if(q[i].op == 0) q[i].num = q[i].s[x] - '0'; else{ int a = q[q[i].a].num, b = q[q[i].b].num; if(q[i].op == 1) q[i].num = a&b; if(q[i].op == 2) q[i].num = a|b; if(q[i].op == 3) q[i].num = a^b; } ans += q[i].num; } return ans;}int main(){ cin >> n >> m; string s; mp["?"] = 0; for(int i = 1; i <= n; i++){ cin >> s; mp[s] = i; cin >> s; cin >> s; if(isdigit(s[0])){ q[i].op = 0; q[i].s = s; } else{ q[i].a = mp[s]; cin >> s; if(s[0] == 'A') q[i].op = 1; if(s[0] == 'O') q[i].op = 2; if(s[0] == 'X') q[i].op = 3; cin >> s; q[i].b = mp[s]; } } string ans1 = "", ans2 = ""; for(int i = 0; i < m; i++){ int cnt1 = cal(i, 0); int cnt2 = cal(i, 1); if(cnt1 <= cnt2) ans1 += '0'; else ans1 += '1'; if(cnt1 >= cnt2) ans2 += '0'; else ans2 += '1'; } cout << ans1 << endl; cout<< ans2 << endl;}
上一篇:hadoop第三坑

下一篇:菱形繼承 虛繼承

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 富源县| 新和县| 那坡县| 芜湖县| 金阳县| 齐齐哈尔市| 屯门区| 工布江达县| 松阳县| 鹤岗市| 隆化县| 花莲市| 醴陵市| 玉山县| 奉化市| 平舆县| 旺苍县| 稻城县| 定南县| 马山县| 界首市| 通海县| 兴国县| 亳州市| 靖远县| 山东省| 灵山县| 安塞县| 昌黎县| 宿迁市| 莒南县| 恩平市| 巴楚县| 阳东县| 漳州市| 八宿县| 沂水县| 临泽县| 堆龙德庆县| 安新县| 绥江县|