Codeforce957B(暴力模拟)

本文介绍了一种算法,用于验证一系列操作是否能将初始状态的矩阵中的特定符号消除。通过使用标记辅助的方法,确保每次操作选择的行和列满足特定条件,并最终判断矩阵是否能被完全清除。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Mystical Mosaic

There is a rectangular grid of n rows of m initially-white cells each.
Arkady performed a certain number (possibly zero) of operations on it. In the i-th operation, a non-empty subset of rows Ri and a non-empty subset of columns Ci are chosen. For each row r in Ri and each column c in Ci, the intersection of row r and column c is coloured black.
There’s another constraint: a row or a column can only be chosen at most once among all operations. In other words, it means that no pair of (i, j) (i < j) exists such that or , where denotes intersection of sets, and denotes the empty set.
You are to determine whether a valid sequence of operations exists that produces a given final grid.tp://codeforces.com/contest/957/problem/B)

题意:给你一个n*m矩阵,有一种操作—在矩阵中选出一些行与列(每一行,每一列只能选一次),要求这些行与列相交的点为‘#’,并且操作之后‘#’变为‘.’,可以进行多次操作,问是否能在多次操作后使得矩阵没有‘#’。
思路:直接暴力模拟操作,对每行每列标记,判断是否符合条件。
#include <iostream>
#include <fstream>
#include <cstdio>
#include <cstring>
#include <queue>
#include <stack>
#include <vector>
#include <map>
#include <set>
#include <cmath>
#include <algorithm>
#include <functional>
#define inf 1000000000
using namespace std;
typedef long long ll;
const int MAXN=1e9+10;
const int MAX=1e3+10;
const double eps=1e-6;

int n,m;
char G[100][100];
int r[100],c[100];

int main(){
    #ifdef ONLINE_JUDGE
    #else
    freopen("in.txt","r",stdin);
    //freopen("output.txt","w",stdout);
    #endif

    cin>>n>>m;
    for(int i=0;i<n;i++)
        scanf("%s",G[i]);
    int juge=1;
    int cnt=1;
    for(int i=0;i<n;i++){
        for(int j=0;j<m;j++){
            if(G[i][j]=='#'){
                if(!r[i]&&!c[j]){
                    r[i]=c[j]=cnt++;
                }
                else if(!r[i]||!c[j]){
                    r[i]=c[j]=max(r[i],c[j]);
                }
                else if(r[i]&&c[j]&&r[i]!=c[j])
                    juge=0;
            }
        }
        if(!juge)   break;
    }
    for(int i =0;i<n;i++){
        for(int j=0;j<m;j++){
            if(G[i][j]=='.'&&r[i]==c[j]&&r[i]!=0){
                //cout<<i<<" "<<j<<endl;
                juge=0;
                break;
            }
        }
    }

    if(juge)    cout<<"Yes"<<endl;
    else cout<<"No"<<endl;


    return 0;
}
### Codeforces Problem 797B Explanation The problem titled "Restoring the Permutation" requires reconstructing a permutation from its prefix sums modulo \( m \). Given an array of integers representing these prefix sums, one must determine whether it is possible to restore such a permutation. In this context, a **permutation** refers to an ordered set containing each integer exactly once within a specified range. The task involves checking if there exists any valid sequence that matches the provided conditions when performing operations as described in the problem statement[^1]. To solve this issue effectively: - Iterate through all elements while maintaining two variables: `current_sum` which tracks cumulative sum during iteration; and `min_value`, used later for adjustments. ```cpp int n, m; cin >> n >> m; vector<int> s(n); for (auto& x : s) cin >> x; ``` Calculate differences between consecutive terms after adjusting initial values appropriately by subtracting minimum value found so far at every step. This adjustment ensures non-negativity throughout calculations without altering relative order among elements. Check feasibility based on properties derived from constraints given in the question text. Specifically, ensure no duplicate residues appear under modulus operation since they would violate uniqueness required for permutations. Finally, construct answer using adjusted difference list obtained previously along with necessary checks ensuring correctness according to rules outlined above.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值