2019 年百度之星·程序设计大赛 - 初赛二

本文详细解析了度度熊与排列问题的算法思路,通过对比原串s与目标串t,寻找是否存在一个1到m的全排列,使得所有字符串组都能通过该排列从s转换为t。通过排序与匹配策略,输出字典序最小的可行排列或-1。

传送门:

  [1]:HDU

  [2]:bestcoder

B.度度熊与排列(思维)

•题意

  有一个数组 p,p 中包含的数为 1~m 的全排列,一个含 m 个字符的串 s;

  在 s 上有一个操作,对于 s 中的第 i 个位置的字符,放到 p[ i ] 位置,构成一个新串 t;

  即 si=tpisi=tpi;

  给你 2n 个串,每两个串为一组,前一个串表示原串 s,后一个串表示经过 p 映射后的新串 t;

  求是否存在某个 1~m 的全排列,使得这 n 组串都可以经过 p 由 s 变为 t;

  如果存在,输出字典序最小的那组,如果不存在,输出 -1;

•思路

就s->t可以对应实现而言

每个s串的每个位置的字母,与每个t串的对应位置的字母是相同的

例如

  s串     t串 

abcdda  addcba

azxcvv   vvcxza

s串每个位置字母

       1    2  3  4  5  6  

     a  b  c  d  d  a

     a  z  x   c  v  v

t串每个位置字母

       1    2  3  4  5  6  

     a  d  d  c  b  a

     v  v  c   x  z  a

所以s与t位置对应

1->6,2->5,3->4,4->3,5->2,6->1

为了方便查找,我们可以将s串每一列按字典序排序,t串每一列按字典序排序

于是变成

s串

       1    6  2  3  4  5  

     a  a  b  c  d  d

     a  v  z   x  c  v

t串

       6    1  5  4  3  2  

     a  a  b  c  d  d

     a  v  z   x  c  v

排序之后s的每一列,与t的每一列应该是完全相同的,

s与t所对应的序号,就是对应的位置

•代码

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 
 4 pair<string,int> p1[55],p2[55];
 5 string s[25],t[25];
 6 
 7 int main()
 8 {
 9     int T;
10     cin>>T;
11     while(T--)
12     {
13         int n,m;
14         cin>>n>>m;
15         for(int i=1;i<=n;i++)
16             cin>>s[i]>>t[i];
17 
18         for(int j=0;j<m;j++)
19         {
20             string x,y;
21             for(int i=1;i<=n;i++)
22             {
23                 x+=s[i][j];
24                 y+=t[i][j];
25             }
26             p1[j].first=x,p2[j].first=y;
27             p1[j].second=j+1,p2[j].second=j+1;
28         }
29         sort(p1,p1+m);
30         sort(p2,p2+m);
31 
32         int index[55];
33         bool flag=true;
34         for(int i=0;i<m;i++)
35         {
36             if(p1[i].first!=p2[i].first)
37             {
38                 puts("-1");
39                 flag=false;
40                 break;
41             }
42             index[p1[i].second]=p2[i].second;
43         }
44         if(!flag)
45             continue;
46         for(int i=1;i<=m;i++)
47         {
48             if(i!=1)
49                 printf(" %d",index[i]);
50             else
51                 printf("%d",index[i]);
52         }
53         puts("");
54     }
55 }
View Code
基于TROPOMI高光谱遥感仪器获取的大气成分观测资料,本研究聚焦于大气污染物一氧化氮(NO₂)的空间分布与浓度定量反演问题。NO₂作为影响空气质量的关键指标,其精确监测对环境保护与大气科学研究具有显著价值。当前,利用卫遥感数据结合先进算法实现NO₂浓度的高精度反演已成为该领域的重要研究方向。 本研究构建了一套以深度学习为核心的技术框架,整合了来自TROPOMI仪器的光谱辐射信息、观测几何参数以及辅助气象数据,形成多维度特征数据集。该数据集充分融合了不同来源的观测信息,为深入解析大气中NO₂的时空变化规律提供了数据基础,有助于提升反演模型的准确性与环境预测的可靠性。 在模型架构方面,项目设计了一种多分支神经网络,用于分别处理光谱特征与气象特征等多模态数据。各分支通过独立学习提取代表性特征,并在深层网络中进行特征融合,从而综合利用不同数据的互补信息,显著提高了NO₂浓度反演的整体精度。这种多源信息融合策略有效增强了模型对复杂大气环境的表征能力。 研究过程涵盖了系统的数据处理流程。前期预处理包括辐射定标、噪声抑制及数据标准化等步骤,以保障输入特征的质量与一致性;后期处理则涉及模型输出的物理量转换与结果验证,确保反演结果符合实际大气浓度范围,提升数据的实用价值。 此外,本研究进一步对不同功能区域(如城市建成区、工业带、郊区及自然背景区)的NO₂浓度分布进行了对比分析,揭示了人类活动与污染物空间格局的关联性。相关结论可为区域环境规划、污染管控政策的制定提供科学依据,助力大气环境治理与公共健康保护。 综上所述,本研究通过融合TROPOMI高光谱数据与多模态特征深度学习技术,发展了一套高效、准确的大气NO₂浓度遥感反演方法,不仅提升了卫大气监测的技术水平,也为环境管理与决策支持提供了重要的技术工具。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值