MUTC 1 A - Clairewd’s message 扩展KMP

本文深入解析了FBI成员Clairewd在BUPT潜伏期间,通过特定转换表加密发送给ykwd的重要消息。面对GFW的监视,Clairewd巧妙地停止了消息传输。GFW利用获得的转换表,尝试分离并还原短文本信息。文章详细展示了如何利用提供的文本和转换表,计算出最可能的完整信息。

Clairewd’s message

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 2296    Accepted Submission(s): 901


Problem Description
Clairewd is a member of FBI. After several years concealing in BUPT, she intercepted some important messages and she was preparing for sending it to ykwd. They had agreed that each letter of these messages would be transfered to another one according to a conversion table.
Unfortunately, GFW(someone's name, not what you just think about) has detected their action. He also got their conversion table by some unknown methods before. Clairewd was so clever and vigilant that when she realized that somebody was monitoring their action, she just stopped transmitting messages.
But GFW knows that Clairewd would always firstly send the ciphertext and then plaintext(Note that they won't overlap each other). But he doesn't know how to separate the text because he has no idea about the whole message. However, he thinks that recovering the shortest possible text is not a hard task for you.
Now GFW will give you the intercepted text and the conversion table. You should help him work out this problem.
 

Input
The first line contains only one integer T, which is the number of test cases.
Each test case contains two lines. The first line of each test case is the conversion table S. S[i] is the ith latin letter's cryptographic letter. The second line is the intercepted text which has n letters that you should recover. It is possible that the text is complete.
Hint
Range of test data:
T<= 100 ;
n<= 100000;
 

Output
For each test case, output one line contains the shorest possible complete text.
 

Sample Input
  
2 abcdefghijklmnopqrstuvwxyz abcdab qwertyuiopasdfghjklzxcvbnm qwertabcde
 

Sample Output
  
abcdabcd qwertabcde
 

Author
BUPT
 

Source
 

Recommend
zhuyuanchen520
 
---------------------

_(:3」∠)_ 其实我不会扩展KMP

---------------------

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>

using namespace std;

const int MM=111111;

int next[MM],extand[MM];
char P[MM],T[MM];

void GetNext(const char *T)
{
    int len=strlen(T),a=0;
    next[0]=len;
    while(a<len-1 && T[a]==T[a+1]) a++;
    next[1]=a;
    a=1;
    for(int k=2; k<len; k++)
    {
        int p=a+next[a]-1,L=next[k-a];
        if( (k-1)+L >= p)
        {
            int j = (p-k+1)>0 ? (p-k+1) : 0;
            while(k+j<len && T[k+j]==T[j]) j++;
            next[k]=j;
            a=k;
        }
        else
            next[k]=L;
    }
}
void GetExtand(const char *S,const char *T)
{
    GetNext(T);
    int slen=strlen(S),tlen=strlen(T),a=0;
    int MinLen = slen < tlen ? slen : tlen;
    while(a<MinLen && S[a]==T[a]) a++;
    extand[0]=a;
    a=0;
    for(int k=1; k<slen; k++)
    {
        int p=a+extand[a]-1, L=next[k-a];
        if( (k-1)+L >= p)
        {
            int j= (p-k+1) > 0 ? (p-k+1) : 0;
            while(k+j<slen && j<tlen && S[k+j]==T[j]) j++;
            extand[k]=j;
            a=k;
        }
        else
            extand[k]=L;
    }
}

int main()
{
    int lex;
    char cg[30];
    char eng[30];
    scanf("%d",&lex);
    while (lex--)
    {
        scanf("%s",cg);
        scanf("%s",T);
        for (int i=0; i<26; i++)
        {
            eng[cg[i]-'a']=i+'a';
        }
        int len=strlen(T);
        for (int i=0; i<len; i++)
        {
            P[i]=eng[T[i]-'a'];
        }
        //puts(T);
        //puts(P);
        GetExtand(T,P);
        int ret=len;
        for (int i=(len+1)/2;i<len;i++)
        {
            if (extand[i]+i>=len)
            {
                ret=i;
                break;
            }
        }
        for (int i=0;i<ret;i++) printf("%c",T[i]);
        for (int i=0;i<ret;i++) printf("%c",P[i]);
        puts("");
    }
    return 0;
}






<think>我们正在讨论如何通过软件仿真获取三元半导体合金(如InGaAs)的弯曲系数(bowing parameter)。弯曲系数描述了合金的禁带宽度等参数随组分变化的非线性程度,通常用二次函数的系数表示,即: $$E_g(x) = x E_g^{A} + (1-x) E_g^{B} - b x(1-x)$$ 其中$b$就是弯曲系数。 使用软件进行仿真的方法主要包括第一性原理计算和半导体器件仿真软件(TCAD)两种途径。下面我们将详细讨论这两种方法。 ### 1. **第一性原理计算软件** 这类软件基于量子力学基本原理,通过求解薛定谔方程来模拟材料的电子结构。常用的软件包有VASP、Quantum ESPRESSO、ABINIT等。具体步骤如下: **步骤1:构建结构模型** - 对于三元合金(如In$_{x}$Ga$_{1-x}$As),需要构建不同组分$x$的晶体结构模型。由于合金中原子排列是无序的,通常采用特殊准随机结构(SQS)来近似模拟无序态。 - 示例:使用Materials Studio或ASE(Atomic Simulation Environment)生成InGaAs的SQS超胞。以下是一个用ASE生成SQS的简化示例代码: ```python from ase.build import bulk from sqs import generate_sqs # 构建64原子的超胞(4x4x4) base = bulk('InAs', crystalstructure='zincblende', a=6.058) atoms = base.repeat((4,4,4)) # 生成组分为x=0.5的SQS结构 generate_sqs(atoms, {'In':0.5, 'Ga':0.5}, size=64) ``` **步骤2:电子结构计算** - 使用密度泛函理论(DFT)计算能带结构。由于标准DFT(如LDA、GGA)会低估带隙,推荐使用杂化泛函(如HSE06)或GW方法进行修正。 - 计算不同组分$x$下的带隙$E_g(x)$。 **步骤3:拟合弯曲系数** - 将计算得到的不同$x$对应的$E_g(x)$数据点,用二次函数拟合: $$E_g(x) = x E_g^{\text{InAs}} + (1-x) E_g^{\text{GaAs}} - b x(1-x)$$ - 拟合得到的二次项系数$b$即为弯曲系数。 **注意事项**:计算精度取决于泛函选择、k点网格密度和超胞大小。通常需要收敛性测试以确保结果可靠。 ### 2. **半导体器件仿真软件(TCAD)** 这类软件(如Sentaurus TCAD、Silvaco Atlas)通过求解半导体物理方程(泊松方程、载流子连续性方程等)来模拟器件特性,也可用于材料参数提取。 **步骤1:定义材料参数** - 在软件中建立In$_{x}$Ga$_{1-x}$As材料模型,输入基础参数: - 二元化合物参数:InAs和GaAs的禁带宽度$E_g$、电子亲和能$\chi$、有效质量$m^*$等。 - 弯曲系数初始估计值(可从文献获取,如InGaAs的$b \approx 0.477\text{ eV}$[^1])。 **步骤2:设置虚拟实验** - 构造简单的器件结构(如pn结或肖特基二极管),通过改变In组分$x$,仿真其电流-电压(I-V)或电容-电压(C-V)特性。 - 利用光学仿真模块(如Sentaurus DEVICE中的Optical Interface)模拟吸收光谱,提取不同组分下的禁带宽度$E_g(x)$。 **步骤3:参数提取与优化** - 将仿真得到的$E_g(x)$数据与二次函数模型拟合,优化弯曲系数$b$。 - 若仿真结果与实验数据不符,可通过参数校准工具(如Sentaurus Calibration)调整$b$值,直至匹配。 > **示例流程(Sentaurus TCAD)**: > 1. 在`material.cmd`中定义InGaAs合金模型: > ```tcl > Material = "InGaAs" { > Parameter = "BandGap" { > Val = x*0.36 + (1-x)*1.42 - 0.477*x*(1-x) # 单位:eV > } > ... > } > ``` > 2. 仿真不同$x$下的器件光学响应,提取$E_g$(吸收系数$\alpha \propto \sqrt{h\nu - E_g}$)。 > 3. 使用`tfitter`工具拟合$b$值。 ### 仿真方法对比 | **方法** | **优点** | **缺点** | |------------------|-----------------------------------|-----------------------------------| | 第一性原理计算 | 无需实验数据,可探索新材料 | 计算成本高,需高性能计算集群 | | TCAD仿真 | 结合器件物理,结果更贴近应用 | 依赖初始参数,需实验数据验证 | ### 注意事项 - **组分均匀性假设**:仿真通常假设合金组分均匀,实际生长中可能存在偏析,需通过X射线衍射(XRD)或能谱仪(EDS)验证[^3]。 - **温度依赖性**:弯曲系数可能随温度变化,需在仿真中考虑温度模型(如Varshni方程)。 --- **相关问题** 1. 如何验证仿真得到的弯曲系数的准确性? 2. 弯曲系数是否与压力或应变有关? 3. 四元合金(如InGaAlAs)的弯曲参数如何通过TCAD仿真获取? </think>要使用软件仿真三元半导体合金(如InGaAs)的弯曲系数(bowing parameter),主要有以下两种技术路线: --- ### 1. **第一性原理计算软件** 通过量子力学模拟材料电子结构,计算不同组分下的禁带宽度: ```python # 使用VASP进行InGaAs带隙计算(伪代码) from ase.build import bulk from vasp import Vasp # 构建不同In组分的超胞 for x in [0.2, 0.5, 0.8]: # In组分比例 atoms = bulk('InGaAs', crystalstructure='zincblende', a=6.058*x + 5.653*(1-x)) # 维加德定律估算晶格常数 calc = Vasp(xc='HSE06', kpts=[4,4,4]) # 使用杂化泛函 atoms.calc = calc bandgap = calc.get_bandgap() # 获取禁带宽度 # 存储数据用于后续拟合 save_data(x, bandgap) # 拟合弯曲系数b fit_curve(E_g = x*E_g_InAs + (1-x)*E_g_GaAs - b*x*(1-x)) ``` **关键步骤**: - 使用**VASP/Quantum ESPRESSO**构建特殊准随机结构(SQS)模拟原子无序排列[^3] - 采用**HSE06或GW方法**解决带隙低估问题 - 通过**批量组分扫描**获取$E_g(x)$数据点 - 用二次函数拟合弯曲系数$b$(InGaAs典型值约0.48 eV) --- ### 2. **半导体TCAD仿真软件** 利用器件仿真平台提取光学/电学参数反推弯曲系数: ```tcl # Sentaurus TCAD命令示例 (InGaAs光电探测器仿真) Device { Material = InGaAs { Composition = x_In; # 设置In组分变量 BandGap = 0.36*x + 1.42*(1-x) - b*x*(1-x); # 弯曲模型 } Optics { Spectrum = AM1.5; # 光源设置 AbsorptionModel = Tauc; # 基于禁带宽度的吸收模型 } ParameterSweep { Var x_In = [0.1 -> 0.9 step 0.1]; # 扫描组分 Extract BandGap from OpticalResponse; # 从吸收边提取Eg } Calibration { Target Experimental_Eg; # 输入实验数据 Optimize b; # 优化弯曲系数 } } ``` **操作流程**: 1. 在**Sentaurus/Silvaco Atlas**中建立器件模型 2. 通过光学仿真(吸收光谱)或电学仿真(暗电流温度特性)提取$E_g$ 3. 使用**参数扫描+优化器**校准弯曲系数$b$ 4. 验证:比较仿真与实验的响应谱/IV曲线(如文献[2]的MUTC-PD器件) --- ### 关键考虑因素 | 方法 | 计算资源 | 精度 | 适用阶段 | |------------|------------|-----------|---------------| | 第一性原理 | 高 (HPC) | ±0.1 eV | 新材料设计 | | TCAD仿真 | 中等 | ±0.05 eV | 器件工艺验证 | > 📌 **注意事项**: > - 界面效应:衬底晶格失配(如Ge/Si衬底[^3])会引入应变,需在仿真中添加应变模型: > $$E_g^{\text{strained}} = E_g^{\text{bulk}} + \Delta E_{\text{hydrostatic}} + \Delta E_{\text{shear}}$$ > - 温度依赖性:结合Varshni方程$E_g(T) = E_0 - \alpha T^2/(T+\beta)$ > - 文献[1]指出高In组分需考虑载流子浓度对带隙的修正 --- **相关问题** 1. 如何验证仿真得到的弯曲系数准确性? 2. 衬底应变对InGaAs弯曲系数有何影响? 3. TCAD仿真中如何处理四元合金(如InGaAlAs)的弯曲参数?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值