鱼C论坛

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

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

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

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

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

x
#include <bits/stdc++.h>
typedef long long ll;
using namespace std;
int dp[30][30];
const int INT_MAX=0x3f3f3f3f;//无穷大 
int main()        
{
   char str1[1001],str2[1001];
   cin>>str1>>str2;
   int a;//几条边 
   cin>>a;
   for(int i=0;i<26;i++)
   {
      for(int j=0;j<26;j++)
      {
         i==j?dp[i][j]=0:dp[i][j]=INT_MAX;//同一个边距离为0 
      }
   }
   for(int i=0;i<a;i++)
   {
      char c1,c2; 
      getchar();//回车? 
      cin>>c1>>c2;
      if(c1!=c2)
      dp[c1-'a'][c2-'a']=1;
   }
   for(int k=0;k<26;k++)
   {
     for(int j=0;j<26;j++)
     {
        for(int i=0;i<26;i++)
        {
           
           dp[i][j]=min(dp[i][j],dp[i][k]+dp[k][j]);//floyd模板
        }
     }
   }
   ll sum=0;//这里要开ll,不然-1的样例会爆
   for(int i=0;i<strlen(str1);i++)
   {
      sum=sum+dp[str1[i]-'a'][str2[i]-'a'];
   }
   if(sum>=INT_MAX) cout<<"-1"<<endl;
   else cout<<sum<<endl;
   return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

if __name__ == "__main__":
    str1, str2 = map(str, input().split())
    a = int(input())
    for i in range(26):
        for j in range(26):
            dp[i][j] = 0 if i == j else INT_MAX
    for i in range(a):
        c1, c2 = map(lambda x: x, input().split())
        if(c1 != c2): dp[ord(c1)-ord('a')][ord(c2)-ord('a')] = 1
    for k in range(26):
        for j in range(26):
            for i in range(26):
                dp[i][j] = min(dp[i][j], dp[i][k]+dp[k][j])
    sum = 0
    for i in range(len(str1)):
        sum = sum +dp[str1[i] - ord('a')][str2[i]-ord('a')]
    if sum >= INT_MAX: print(-1)
    else: print(sum)
    exit()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-12-5 14:11:34 | 显示全部楼层
不知道你的代码是什么东西,也没有参数作为对照参考,我直接从你的代码重新编写 Python 代码,希望对你有帮助
想知道小甲鱼最近在做啥?请访问 -> 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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

题目是这样的  但是c++运行超时  所以想换p试试  您刚刚发的那个我试了试  第五行报错
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

C++都超时,我觉得python基本没戏
C++的优势不就在这儿吗?
你认为python的运行速度比的过C++ ?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

那可能是我算法没学好吧  
想知道小甲鱼最近在做啥?请访问 -> 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
是什么意思?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

也许吧
想知道小甲鱼最近在做啥?请访问 -> 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
是什么意思?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

if __name__ == "__main__":
    str1,str2 = map(str,input().split(':'))
    a = int(input())
    for i in range(26):
        for j in range(26):
            dp[i][j] = 0 if i == j else INT_MAX
    for i in range(a):
        c1, c2 = map(lambda x:x, input().split())
        if(c1 != c2):dp[ord(c1)-ord('a')][ord(c2)-ord('a')] = 1
    for k in range(26):
        for j in range(26):
            for i in range(26):
                dp[i][j] = min(dp[i][j], dp[i][k]+dp[k][j])
    sum = 0
    for i in range(len(str1)):
        sum = sum +dp[str1[i] - ord('a')][str2[i]-ord('a')]
    if sum >= INT_MAX:  print(-1)
    else:  print(sum)
    exit()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

上面那个老哥回复的这个
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

使用道具 举报

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

我的 2 楼的代码是你的 C++ 转换成 Python 的产物(明显不能这样做),你试试我重写新的代码(13楼)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

int main() {
    static char a[M], b[M];
        int n;
    std::cin.getline(a, M);
    std::cin.getline(b, M);
    std::cin >> n;
    int res = 0, answer = -1;
    for (size_t i = 0; i < n; i++) {
        char x, y;
        std::cin >> x;
        std::cin >> y;
        for (size_t j = 0; j < strlen(a); j++)  if (a[j] == x) { a[j] = y; res++; }
        bool flag = true;
        for (size_t j = 0; j < strlen(a); j++) if (a[j] != b[j]) { flag = false; break; }
        if (flag)  answer = res;
    }
    std::cout << answer << std::endl;
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-12 16:01

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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