2024.08.03科大讯飞飞凡计划(简单)

1. 交换树节点

给定一棵树,每个节点有一个权值。现在每次可以交换任意两个节点的权值,
请问最少多少次交换可以使得每个节点的权值等于它的编号?
保证给出的权值是一个排列,也就是说保证一定有解。

不用考虑树的关系,因为不是相邻交换 ``` int main() { int n; cin>>n; vector tree(n+1); unordered_map m;//记录对应值所在的位置 for(int i=1;i<=n;i++){ cin>>tree[i]; m[tree[i]] = i; } for(int i=1;i>from>>to; } int res = 0; for(int i=1;i<=n;i++){ if(i==m[i]) continue; int taridx = m[i]; int val = tree[i]; swap(tree[i],tree[taridx]); m[val] = taridx; res++; } cout<

2. 时区转换

东八区(UTC/GMT+08:00)是比世界协调时间(UTC)/格林尼治时间(GMT)快8小时的时区
当格林尼治标准时间为00:00时东八区的标准时间为08:00。
输入北京时间,输出格林尼治标准时间

模拟题减八小时
int main() {
    int T;
    cin>>T;
    while(T--){
        string beijing;
        cin>>beijing;
        int idx = 0;
        while(idx<beijing.size()&&beijing[idx]!=':')
            idx++;
        int hour = 0;
        for(int i=0;i<idx;i++){
            hour = hour*10 + (beijing[i]-'0');
        }
        hour = (hour+24-8)%24;
        string res = "";
        while(hour){
            res = to_string(hour%10) + res;
            hour/=10;
        }
        if(res.size()==0) res = "00" + res;
        if(res.size()==1) res = "0" + res;
        cout<<res + beijing.substr(idx)<<endl;
    }
    return 0;
}

3. 树上最长链

posted @ 2024-09-05 16:16  失控D大白兔  阅读(13)  评论(0编辑  收藏  举报