首页 > 其他分享 >CodeForces-1715D 2+ doors

CodeForces-1715D 2+ doors

时间:2022-08-22 14:47:07浏览次数:100  
标签:数字 1715D int CodeForces doors 考虑 include 贪心

2+ doors

贪心

位与位之间互不一向,因此考虑每个位进行考虑就行

因为是或的关系,先考虑 \(0\) 的情况,如果出现 \(0\),则两个数字的该位必然是 \(0\)

如果是 \(1\) 的情况,就考虑贪心,从第一个数字开始往后考虑:

如果另一个数字的当前位是 \(0\),则将当前数字的当前位置为 \(1\),剩下的数字都是 \(0\)

因此可以考虑直接用位运算,一开始假设所有数字的所有位都是 \(1\),然后赋予 \(0\) 的情况,最后再贪心的计算 \(1\) 的情况,防止冲突

#include <iostream>
#include <cstdio>
#include <string>
#include <vector>
using namespace std;
const int maxn = 1e5 + 10;
#define pii pair<int, int>
vector<pii>gra[maxn];

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    int n, m;
    cin >> n >> m;
    vector<int>ans(n + 1, (1 << 30) - 1);
    for(int i=0; i<m; i++)
    {
        int a, b, c;
        cin >> a >> b >> c;
        if(b > a) swap(a, b);
        gra[a].push_back({b, c});
        gra[b].push_back({a, c});
        ans[a] &= c;
        ans[b] &= c;
    }
    for(int i=1; i<=n; i++)
    {
        int now = 0;
        for(auto [nex, val] : gra[i])
        {
            now |= val & ~ans[nex];
            if(nex == i) now = val;
        }
        ans[i] &= now;
    }
    for(int i=1; i<=n; i++)
        cout << ans[i] << " ";
    cout << endl;
    return 0;
}

标签:数字,1715D,int,CodeForces,doors,考虑,include,贪心
From: https://www.cnblogs.com/dgsvygd/p/16612731.html

相关文章

  • CodeForces-1715C Monoblock
    Monoblockdp先想想如何计算初始值\(dp[x]\)表示以第\(x\)个位置为\(r\),他的所有贡献状态转移:如果\(a_x=a_{x-1}\):\(dp[x]=dp[x-1]+1\),代表只增加了\(l......
  • CodeForces-1719D Burenka and Traditions
    BurenkaandTraditions贪心由于代价是向上取整的,因此可以直接考虑成两种方式:选择两个相邻的数,让他们同时异或上一个值选择一个数字,让他变成\(0\)由此可见,最多......
  • Codeforces Round #743 (Div. 2) B. Swaps(思维)
    https://codeforces.com/contest/1573/problem/B给定两个长度为n的数组,数组a和数组b数组a包含从1到2*n的任意顺序的奇数,数组b包含从1到2*n的任意偶数可执行的操作如下:......
  • Codeforces 1715E - Long Way Home
    又是废掉的一个div2啊第一次在学校熬夜打cf,开心还看到了自己最喜欢的斜率优化ohhh链接:E-LongWayHome看到那个平方就可以靠感觉认为是斜率优化了....感觉似不似......
  • Codeforces Round #816 (Div. 2)
    题面A.Crossmarket不妨设\(n\gem\),则答案为\(n+2(m-1)\)。特别地,\(n=1,m=1\)时答案为\(0\),注意特判。ViewCode#include<stdio.h>#include<algorithm>int......
  • [Codeforces Round #816 (Div. 2)] D. 2+ doors
    这次Div.2比之前我打的有些要难啊,前三道题就耗了好多时间,D题干脆摆烂了。。。还是太逊了对于一个\(x\),有\(x|y_i=z_i\),那么我们设\(num[x]=z_1\)&\(z_2\)&\(z_3\)..........
  • 【长期】板刷Codeforces 1500-1700 的构造题
    【长期】板刷Codeforces1500-1700的构造题https://codeforces.com/problemset/page/1?tags=constructive+algorithms%2C1500-1700&order=BY_RATING_ASC每天三道,记录一......
  • CF1715D 2+ doors
    简要题意对于一个数组\(a\),给定\(Q\)个限制条件,每个条件给出\(i,j,x\)使得\(a_i|a_j=x\)。构造数组使其字典序最小。Solution以下\(ans_i\)表示最后我们构造出......
  • Codeforces 1720 D, E
    D1设\(dp(i)\)表示考虑前i个数的最长子序列。枚举\(j\),从\(dp(j)+1\)转移到\(dp(i)\),转移条件就是题中给的那个不等式。发现\(i-j\)不能超过\(300\),暴力枚举即可。时间......
  • [题解] Codeforces 1720 E Misha and Paintings 结论
    算是诈骗题?令一开始就存在的颜色数为cnt。k>=cnt的情况,显然每次找一个出现不止一次的颜色,然后把这个颜色的恰好一个方块替换成一种没有出现过的颜色就可以了,\(k-cnt\)次解......