Y - X的旅游计划

Description

X在最后的几周安心学习,考试有惊无险,so,X和女友就要计划一下放假后的时间了,来一场说走就走的旅行,这是两个人的一致想法,但是究竟去哪里玩,就要好好考虑一下了。

X和他的女友都有一些自己想去的地方,于是X想让大家帮他找一找两个人都想去的地方。

Input

测试案例有多组,每个案例:

第一行输入两个数n,m(n < 100 && m < 100)。X想要去的地方有n个,女友想要去的地方有m个。

之后n行,每行一个字符串(长度小于10)表示X想去的地名。

之后m行,每行一个字符串(长度小于10)表示女友想去的地名。

Output

 

将在n中和在m中都出现过得字符串输出(字典序)。

如果没有相同的字符串,输出”sad!”(不含引号)。

Sample

Input 

2 2
aaa
bbb
aaa
bbb

Output 

aaa
bbb

Hint

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>

int main(){
    int n, m, i, j, count;
    char b[100][10];
    char g[100][10];
    char c[100][10];
    char temp[10];
    while(~scanf("%d %d", &n, &m)){
        count = 0;
        for(i = 0; i < n; i++){
            scanf("%s", b[i]);
        }
        //getchar();
        for(i = 0; i < m; i++){
            scanf("%s", g[i]);
        }

        for(i = 0; i < n; i++){
            for(j = 0; j < m; j++){
                if(strcmp(b[i], g[j]) == 0){
                    strcpy(c[count++], b[i]);
                    //count++;
                }

            }
        }
        if(count != 0){
            for(i = 0; i < count - 1; i++){
                for(j = 0; j < count - i - 1; j++){
                    if(strcmp(c[j], c[j + 1]) > 0){
                        strcpy(temp, c[j]);
                        strcpy(c[j], c[j + 1]);
                        strcpy(c[j + 1], temp);
                    }
                }
            }
            for(i = 0; i < count; i++){
                printf("%s\n", c[i]);
            }
        }
        else{
            printf("sad!\n");
        }
    }
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
这段代码是一个求解旅行商问题(TSP)的模拟退火算法。下面是逐行解析: 1. clear all; close all; 清除所有变量和图形窗口。 2. n = 30; 定义点的数量为30个。 3. x = rand(1,n); y = rand(1,n); 生成30个随机坐标,作为TSP中的点。 4. T = 1000; T_min = 1e-8; alpha = 0.99; 定义初始温度、最小温度和降温速率。 5. path = 1:n; dis = 0; 定义初始路径为从1到n的顺序路径,并且初始化路径长度为0。 6. for i = 1:n-1 dis = dis + sqrt((x(path(i))-x(path(i+1)))^2+(y(path(i))-y(path(i+1)))^2); end 计算初始路径长度,即依次计算相邻两点之间的距离并累加。 7. dis = dis + sqrt((x(path(n))-x(path(1)))^2+(y(path(n))-y(path(1)))^2); 计算回到起点的距离并加入总长度。 8. while T > T_min 当温度大于最小温度时,继续模拟退火。 9. i = randi(n); j = randi(n); while i == j j = randi(n); end 随机选择两个点进行交换操作。 10. new_path = path; new_path(i) = path(j); new_path(j) = path(i); 生成新的路径,即交换i和j位置上的点。 11. new_dis = 0; for k = 1:n-1 new_dis = new_dis + sqrt((x(new_path(k))-x(new_path(k+1)))^2+(y(new_path(k))-y(new_path(k+1)))^2); end 计算新路径的长度。 12. new_dis = new_dis + sqrt((x(new_path(n))-x(new_path(1)))^2+(y(new_path(n))-y(new_path(1)))^2); 计算回到起点的距离并加入新路径长度。 13. delta = new_dis - dis; 计算路径长度差值。 14. if delta < 0 || exp(-delta/T) > rand() path = new_path; dis = new_dis; end 如果新路径长度更短,或者满足一定概率的条件,则接受新路径。 15. T = T * alpha; 降温。 16. end 结束模拟退火。 17. figure; plot(x,y,'o'); hold on; plot([x(path) x(path(1))],[y(path) y(path(1))]); title(['Total Distance: ' num2str(dis)]); 画出所有点和最优路径,并且标注总路径长度。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员豪仔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值