chenwhccc 发表于 2021-12-5 13:32:18

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

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

傻眼貓咪 发表于 2021-12-5 14:10:24

本帖最后由 傻眼貓咪 于 2021-12-5 14:14 编辑

dp = [ 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 = 0 if i == j else INT_MAX
    for i in range(a):
      c1, c2 = map(lambda x: x, input().split())
      if(c1 != c2): dp = 1
    for k in range(26):
      for j in range(26):
            for i in range(26):
                dp = min(dp, dp+dp)
    sum = 0
    for i in range(len(str1)):
      sum = sum +dp - ord('a')]-ord('a')]
    if sum >= INT_MAX: print(-1)
    else: print(sum)
    exit()

傻眼貓咪 发表于 2021-12-5 14:11:34

不知道你的代码是什么东西,也没有参数作为对照参考,我直接从你的代码重新编写 Python 代码,希望对你有帮助

chenwhccc 发表于 2021-12-5 15:07:13

傻眼貓咪 发表于 2021-12-5 14:10


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

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

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

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

样例输入
dabc
dddd
3
a b
b c
c d
样例输出
6

chenwhccc 发表于 2021-12-5 15:08:08

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

题目是这样的但是c++运行超时所以想换p试试您刚刚发的那个我试了试第五行报错

人造人 发表于 2021-12-5 15:22:42

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

C++都超时,我觉得python基本没戏
C++的优势不就在这儿吗?
你认为python的运行速度比的过C++ ?

chenwhccc 发表于 2021-12-5 15:26:42

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

那可能是我算法没学好吧

chenwhccc 发表于 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
是什么意思?

人造人 发表于 2021-12-5 15:28:30

chenwhccc 发表于 2021-12-5 15:26
那可能是我算法没学好吧

也许吧

人造人 发表于 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
是什么意思?

chenwhccc 发表于 2021-12-5 15:30:46

人造人 发表于 2021-12-5 15:30
我看不到你写的代码
我能看到的就是这个



dp = [ 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 = 0 if i == j else INT_MAX
    for i in range(a):
      c1, c2 = map(lambda x:x, input().split())
      if(c1 != c2):dp = 1
    for k in range(26):
      for j in range(26):
            for i in range(26):
                dp = min(dp, dp+dp)
    sum = 0
    for i in range(len(str1)):
      sum = sum +dp - ord('a')]-ord('a')]
    if sum >= INT_MAX:print(-1)
    else:print(sum)
    exit()

chenwhccc 发表于 2021-12-5 15:31:23

chenwhccc 发表于 2021-12-5 15:30


上面那个老哥回复的这个

傻眼貓咪 发表于 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)

傻眼貓咪 发表于 2021-12-5 16:20:14

chenwhccc 发表于 2021-12-5 15:31
上面那个老哥回复的这个

我的 2 楼的代码是你的 C++ 转换成 Python 的产物(明显不能这样做),你试试我重写新的代码(13楼)

傻眼貓咪 发表于 2021-12-5 17:22:51

C++#include <bits/stdc++.h>
#define M 10001000

int main() {
    static char a, b;
        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 == x) { a = y; res++; }
      bool flag = true;
      for (size_t j = 0; j < strlen(a); j++) if (a != b) { flag = false; break; }
      if (flag)answer = res;
    }
    std::cout << answer << std::endl;
    return 0;
}
页: [1]
查看完整版本: 语言转换:把c++转换为python