鱼C论坛

 找回密码
 立即注册
查看: 2296|回复: 14

语言转换:把c++转换为python

[复制链接]
发表于 2021-12-5 13:32:18 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. #include <bits/stdc++.h>
  2. typedef long long ll;
  3. using namespace std;
  4. int dp[30][30];
  5. const int INT_MAX=0x3f3f3f3f;//无穷大
  6. int main()       
  7. {
  8.    char str1[1001],str2[1001];
  9.    cin>>str1>>str2;
  10.    int a;//几条边
  11.    cin>>a;
  12.    for(int i=0;i<26;i++)
  13.    {
  14.       for(int j=0;j<26;j++)
  15.       {
  16.          i==j?dp[i][j]=0:dp[i][j]=INT_MAX;//同一个边距离为0
  17.       }
  18.    }
  19.    for(int i=0;i<a;i++)
  20.    {
  21.       char c1,c2;
  22.       getchar();//回车?
  23.       cin>>c1>>c2;
  24.       if(c1!=c2)
  25.       dp[c1-'a'][c2-'a']=1;
  26.    }
  27.    for(int k=0;k<26;k++)
  28.    {
  29.      for(int j=0;j<26;j++)
  30.      {
  31.         for(int i=0;i<26;i++)
  32.         {
  33.            
  34.            dp[i][j]=min(dp[i][j],dp[i][k]+dp[k][j]);//floyd模板
  35.         }
  36.      }
  37.    }
  38.    ll sum=0;//这里要开ll,不然-1的样例会爆
  39.    for(int i=0;i<strlen(str1);i++)
  40.    {
  41.       sum=sum+dp[str1[i]-'a'][str2[i]-'a'];
  42.    }
  43.    if(sum>=INT_MAX) cout<<"-1"<<endl;
  44.    else cout<<sum<<endl;
  45.    return 0;
  46. }

复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-12-5 14:10:24 | 显示全部楼层
本帖最后由 傻眼貓咪 于 2021-12-5 14:14 编辑
  1. dp = [[0 for _ in range(30)] for _ in range(30)]
  2. INT_MAX = 0x3f3f3f3f

  3. if __name__ == "__main__":
  4.     str1, str2 = map(str, input().split())
  5.     a = int(input())
  6.     for i in range(26):
  7.         for j in range(26):
  8.             dp[i][j] = 0 if i == j else INT_MAX
  9.     for i in range(a):
  10.         c1, c2 = map(lambda x: x, input().split())
  11.         if(c1 != c2): dp[ord(c1)-ord('a')][ord(c2)-ord('a')] = 1
  12.     for k in range(26):
  13.         for j in range(26):
  14.             for i in range(26):
  15.                 dp[i][j] = min(dp[i][j], dp[i][k]+dp[k][j])
  16.     sum = 0
  17.     for i in range(len(str1)):
  18.         sum = sum +dp[str1[i] - ord('a')][str2[i]-ord('a')]
  19.     if sum >= INT_MAX: print(-1)
  20.     else: print(sum)
  21.     exit()
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-12-5 14:11:34 | 显示全部楼层
不知道你的代码是什么东西,也没有参数作为对照参考,我直接从你的代码重新编写 Python 代码,希望对你有帮助
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-12-5 15:07:13 | 显示全部楼层

第一行输入字符串a,长度不大于 10001000,只包含小写字母,表示密码箱上的初始文字。

第二行输入字符串b,只包含小写字母,保证长度和第一个字符串相等,表示正确密码。

第三行输入一个整数 n(0<=n<=676.
接下来n行,每行输入两个空格隔开的字符xi,yi,表示操作规则:一次操作能把字符Xi,变换成Yi

输出格式
如果密码箱能被打开,输出最少的操作次数,否则输出-1

样例输入
dabc
dddd
3
a b
b c
c d
样例输出
6
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-12-5 15:08:08 | 显示全部楼层
傻眼貓咪 发表于 2021-12-5 14:11
不知道你的代码是什么东西,也没有参数作为对照参考,我直接从你的代码重新编写 Python 代码,希望对你有帮 ...

题目是这样的  但是c++运行超时  所以想换p试试  您刚刚发的那个我试了试  第五行报错
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-12-5 15:22:42 | 显示全部楼层
chenwhccc 发表于 2021-12-5 15:08
题目是这样的  但是c++运行超时  所以想换p试试  您刚刚发的那个我试了试  第五行报错

C++都超时,我觉得python基本没戏
C++的优势不就在这儿吗?
你认为python的运行速度比的过C++ ?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-12-5 15:26:42 | 显示全部楼层
人造人 发表于 2021-12-5 15:22
C++都超时,我觉得python基本没戏
C++的优势不就在这儿吗?
你认为python的运行速度比的过C++ ?

那可能是我算法没学好吧  
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-12-5 15:27:26 | 显示全部楼层
人造人 发表于 2021-12-5 15:22
C++都超时,我觉得python基本没戏
C++的优势不就在这儿吗?
你认为python的运行速度比的过C++ ?

python报错
ValueError: not enough values to unpack (expected at least 2, got 1) on line 5
是什么意思?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-12-5 15:28:30 | 显示全部楼层
chenwhccc 发表于 2021-12-5 15:26
那可能是我算法没学好吧

也许吧
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-12-5 15:30:05 | 显示全部楼层
chenwhccc 发表于 2021-12-5 15:27
python报错
ValueError: not enough values to unpack (expected at least 2, got 1) on line 5
是什么 ...

我看不到你写的代码
我能看到的就是这个

python报错
ValueError: not enough values to unpack (expected at least 2, got 1) on line 5
是什么意思?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-12-5 15:30:46 | 显示全部楼层
人造人 发表于 2021-12-5 15:30
我看不到你写的代码
我能看到的就是这个
  1. dp = [[0 for _ in range(30)] for _ in range(30)]
  2. INT_MAX = 0x3f3f3f3f

  3. if __name__ == "__main__":
  4.     str1,str2 = map(str,input().split(':'))
  5.     a = int(input())
  6.     for i in range(26):
  7.         for j in range(26):
  8.             dp[i][j] = 0 if i == j else INT_MAX
  9.     for i in range(a):
  10.         c1, c2 = map(lambda x:x, input().split())
  11.         if(c1 != c2):dp[ord(c1)-ord('a')][ord(c2)-ord('a')] = 1
  12.     for k in range(26):
  13.         for j in range(26):
  14.             for i in range(26):
  15.                 dp[i][j] = min(dp[i][j], dp[i][k]+dp[k][j])
  16.     sum = 0
  17.     for i in range(len(str1)):
  18.         sum = sum +dp[str1[i] - ord('a')][str2[i]-ord('a')]
  19.     if sum >= INT_MAX:  print(-1)
  20.     else:  print(sum)
  21.     exit()
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-12-5 15:31:23 | 显示全部楼层

上面那个老哥回复的这个
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-12-5 15:42:03 | 显示全部楼层
一般不会有人把 C++ 转换成 Python 的,只有把 Python 转换成 C++(难怪我觉得代码不优,Python 有很多自己的函数 C++ 是没有的)。题目参数要求字符串不超于 10001000(数字极大),我的代码有可能超时:
  1. a = input()
  2. b = input()
  3. res = 0
  4. for t, i in enumerate(range(int(input())), start = 1):
  5.     x, y = input().split()
  6.     res += a.count(x)
  7.     a = a.replace(x, y)
  8.     if(a == b):
  9.         print(res)
  10. else: print(-1, a, b) if a != b else print(res)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-12-5 16:20:14 | 显示全部楼层
chenwhccc 发表于 2021-12-5 15:31
上面那个老哥回复的这个

我的 2 楼的代码是你的 C++ 转换成 Python 的产物(明显不能这样做),你试试我重写新的代码(13楼)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-12-5 17:22:51 | 显示全部楼层
C++
  1. #include <bits/stdc++.h>
  2. #define M 10001000

  3. int main() {
  4.     static char a[M], b[M];
  5.         int n;
  6.     std::cin.getline(a, M);
  7.     std::cin.getline(b, M);
  8.     std::cin >> n;
  9.     int res = 0, answer = -1;
  10.     for (size_t i = 0; i < n; i++) {
  11.         char x, y;
  12.         std::cin >> x;
  13.         std::cin >> y;
  14.         for (size_t j = 0; j < strlen(a); j++)  if (a[j] == x) { a[j] = y; res++; }
  15.         bool flag = true;
  16.         for (size_t j = 0; j < strlen(a); j++) if (a[j] != b[j]) { flag = false; break; }
  17.         if (flag)  answer = res;
  18.     }
  19.     std::cout << answer << std::endl;
  20.     return 0;
  21. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-30 23:37

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表