CF1492E - Almost Fault-Tolerant Database

这篇博客介绍了一种解决数据序列匹配问题的算法,目标是在不超过两个更改的情况下,使一个数列与所有数列的差异不超过两个。文章详细阐述了处理存在四个不同项和三个不同项的序列时的策略,并提供了AC代码实现。

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

1492E - Almost Fault-Tolerant Database

题意:

给n个数列,每个数列有m个数,请找出一个数列,使得该数列与每个数列不同项只有2个。

题解:

可以把第一个数列当作初始数列,看看能不能改动不多于2个的情况下,使之成为满足要求的答案。

先遍历,不同项不超过2个的都无所谓。如果存在不同项超过4个的,那怎么改也不会存在答案。那么就考虑不同项有3个或者4个的。

如果存在4个不同项的序列,那就好写了。反正这4个项一定要有2个改成对方的数, C 4 2 C_4^2 C42种情况,每个试一下,注意每个情况试完记得还原。

如果不存在4个的,对任意一个3个不同项的数列。注意

  1. 可以改2项,而不是只改1项。
  2. 改2项一定是3个不同项的2项,但不一定2个都是这个数列的值。a的p1,p2,p3是不同项,可能改 a n s [ p 1 ] = a [ p 1 ] , a n s [ p 2 ] = b [ p 2 ] ≠ a [ p 2 ] ans[p1]=a[p1],ans[p2]=b[p2]\neq a[p2] ans[p1]=a[p1],ans[p2]=b[p2]=a[p2].

这是我写过最屎的代码,没有之一。

AC代码:
#include <bits/stdc++.h>
#define rep(i,a,b) for(int i=(a);i<=(b);i++)
using namespace std;
const int N=25e4+5;
int n,m;
vector<int>s[N];
void print(){
    cout<<"YES"<<endl;
    for(auto j:s[1]) cout<<j<<" ";
}
bool judge(){
    int cnt;
    rep(i,2,n){
        cnt=0;
        rep(j,0,m-1)
            if(s[1][j]!=s[i][j]) ++cnt;
        if(cnt>2) return 0;
    }
    print();
    return 1;
}
bool work(int pos){
    int flag=0,save;
    rep(i,2,n){
        int k=0;
        rep(j,0,m-1){
            if(!flag&&j==pos) continue;
            if(s[i][j]!=s[1][j]) ++k;
        }
        if(k>2){
            if(flag) s[1][pos]=save;
            return 0;
        }
        if(k==2&&!flag){
            save=s[1][pos];
            s[1][pos]=s[i][pos];
            flag=1;
        }
    }
    print();
    return 1;
}
int main(){
    #ifndef ONLINE_JUDGE
    freopen("D:\\work\\data.in","r",stdin);
    #endif
    cin>>n>>m;
    int x;
    rep(i,1,n)
        rep(j,0,m-1){
            cin>>x;
            s[i].push_back(x);
        }
    int cur=0;
    vector<int>pos;    
    rep(i,2,n){
        pos.clear();
        rep(j,0,m-1)
            if(s[1][j]!=s[i][j]) pos.push_back(j);
        if(pos.size()>4){
            cout<<"NO"<<endl;
            return 0;
        }else if(pos.size()<=2) continue;
        else{
            cur=i;
            if(pos.size()==4) break;
        }
    }
    int save1,save2;
    if(cur==0){
        cout<<"YES"<<endl;
        for(auto i:s[1]) cout<<i<<" ";
        return 0;
    }else{
        pos.clear();
        rep(i,0,m-1) if(s[cur][i]!=s[1][i]) pos.push_back(i);
        if(pos.size()==3){
            rep(i,0,pos.size()-1){
                save1=s[1][pos[i]];
                s[1][pos[i]]=s[cur][pos[i]];
                if(judge()) return 0;
                rep(j,0,pos.size()-1){
                    if(i==j) continue;
                    if(work(pos[j])) return 0;
                }
                s[1][pos[i]]=save1;
            }
            cout<<"NO"<<endl;
        }else{
            rep(i,0,pos.size()-1){
                save1=s[1][pos[i]];
                s[1][pos[i]]=s[cur][pos[i]];
                rep(j,i+1,pos.size()-1){
                    save2=s[1][pos[j]];
                    s[1][pos[j]]=s[cur][pos[j]];
                    if(judge()) return 0;
                    s[1][pos[j]]=save2;
                }
                s[1][pos[i]]=save1;
            }
            cout<<"NO"<<endl;
        }
    }
}
### 如何在Simulink中实现或模拟Three-Phase Fault #### 使用内置的Three-Phase Fault模块 在Simulink环境中,`Three-Phase Fault` 是一个用于模拟电力系统中的各种故障情况的有效工具[^2]。此模块允许用户通过短接两个或更多端口来创建不同类型的故障条件。 #### 设置Three-Phase Fault参数 当配置 `Three-Phase Fault` 模块时,可以通过调整其属性对话框内的选项来自定义所要模拟的具体故障场景。这些设置包括但不限于: - **Fault Type**: 可选值有 "None", "Line-Line (LL)", "Double Line-to-Ground (DLG)" 和 "Three Phase (TP)" 等多种模式。 - **Start Time of Fault**: 定义何时启动故障事件的时间戳。 - **Duration of Fault**: 故障持续时间长度设定。 ```matlab % 创建一个新的SIMULINK模型并打开它 new_system('my_fault_simulation'); open_system('my_fault_simulation'); % 添加Three-Phase Fault模块到当前窗口 add_block('powerlib/Faults/Three-Phase Fault','my_fault_simulation/Three_Phase_Fault') % 配置Three-Phase Fault模块参数 set_param('my_fault_simulation/Three_Phase_Fault',... 'faulttype', 'Line-Line (LL)',... % 设定故障类型为线间短路 'tstart', '0.1', ... % 开始时间为0.1秒 'duration', '0.05') % 持续时间为0.05秒 ``` #### 将Three-Phase Fault集成至主电路 为了使 `Three-Phase Fault` 能够影响整个电力系统的运行状态,在设计仿真框架时应将其连接到主要传输路径上适当的位置。这通常意味着将该组件放置于电源与负载之间的一个合适节点处,并确保所有必要的电气接口均已正确对接[^1]。 #### 测试保护机制的效果 利用上述方法构建好包含 `Three-Phase Fault` 的完整电路之后,便可以在不同的工作条件下执行多次实验以评估各类继电保护装置的动作特性以及整体电网的安全性和稳定性表现[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值