您的位置:首页 > 其它

BestCoder 百度之星2016

2016-05-10 11:48 351 查看
20160523百度之星初赛第一场

1001AllX

ProblemDescriptionF(x,m)F(x,m)代表一个全是由数字xx组成的mm位数字。请计算,以下式子是否成立:F(x,m)modk≡cInput第一行一个整数TT,表示TT组数据。每组测试数据占一行,包含四个数字x,m,k,c1≤x≤91≤m≤10​^100≤c<k≤10,000Output对于每组数据,输出两行:第一行输出:"Case#i:"。ii代表第ii组测试数据。第二行输出“Yes”或者“No”,代表四个数字,是否能够满足题目中给的公式。SampleInput
3
1352
1351
359969
SampleOutput
Case#1:
No
Case#2:
Yes
Case#3:
Yes
Hint
对于第一组测试数据:111mod5=1,公式不成立,所以答案是”No”,而第二组测试数据中满足如上公式,所以答案是“Yes”。思路:对于m个x组成的数,这个数太大无法直接计算。所以应该从另外的角度考虑问题。  首先我们得明确对于乘法和加法的求模运算,可以先乘(加)后模或者先模后乘(加),所得结果是一样的。比如(a*b)%c==((a%c)*(b%c))%c;(a+b)%c=(a%c+b%c)%c.  所以这一题我们可以转化到求m个1组成的数对k的余数,同样的这个数也很大,但是k的范围不大,我们知道余数的个数最多是k个不同的值,所以余数是有周期的或者说从某一个数开始会循环。我们需要找到周期开始和周期结束的位置。假设a个1对k的余数是ak,1的个数不断增加,直到b个1对k的余数bk==ak;就会得出周期开始是a个1,周期结束是b-1个1.此后,无论1的个数增加到多少,都是在a~b-1这个区间内,区间长度为b-a。  当有m个数时,m<b时,余数即第m个;m>b时,余数在(m-b)%(b-a)+a这个位置。
importjava.util.HashMap;
importjava.util.Map;
importjava.util.Scanner;

publicclassMain{
publicstaticvoidmain(String[]args){
Scannerin=newScanner(System.in);
while(in.hasNext()){
intt=in.nextInt();
for(inti=1;i<=t;i++){
intx=in.nextInt();
longm=in.nextLong();
intk=in.nextInt();
intc=in.nextInt();

Map<Integer,Integer>map=newHashMap<Integer,Integer>();
int[]ref=newint[k+1];
intallOne=1;
intindex=1;
//计算1~index个1对k的余数,余数个数最多为k个,所以肯定从某个位置开始有周期,找出周期
//某个余数第二次出现了,这就是周期开始位置
while(!map.containsKey(allOne)){
map.put(allOne,index);
ref[index++]=allOne;
allOne=(allOne*10+1)%k;
}
intstart=map.get(allOne);//周期开始的位置,map的最后一项是周期结束的位置
intperiod=index-start;//周期长度
System.out.println("Case#"+i+":");
intres=0;
if(m<index){
res=(ref[(int)m]*x)%k;//转化成m个x的余数
}else{
res=(ref[(int)((m-index)%period+start)]*x)%k;
}
System.out.println(res==c?"Yes":"No");
}
}
}
}
20160514百度之星资格赛

ProblemA

度熊手上有一本字典存储了大量的单词,有一次,他把所有单词组成了一个很长很长的字符串。现在麻烦来了,他忘记了原来的字符串都是什么,神奇的是他竟然记得原来那些字符串的哈希值。一个字符串的哈希值,由以下公式计算得到:H(s)=\prod_{i=1}^{i\leqlen(s)}(S_{i}-28)\(mod\9973)H(s)=∏​i=1​i≤len(s)​​(S​i​​−28)(mod9973)S_{i}S​i​​代表S[i]字符的ASCII码。请帮助度熊计算大字符串中任意一段的哈希值是多少。Input多组测试数据,每组测试数据第一行是一个正整数NN,代表询问的次数,第二行一个字符串,代表题目中的大字符串,接下来NN行,每行包含两个正整数aa和bb,代表询问的起始位置以及终止位置。1\leqN\leq1,0001≤N≤1,0001\leqlen(string)\leq100,0001≤len(string)≤100,0001\leqa,b\leqlen(string)1≤a,b≤len(string)Output对于每一个询问,输出一个整数值,代表大字符串从aa位到bb位的子串的哈希值。SampleInput
2
ACMlove2015
111
810
1
testMessage
11
SampleOutput
6891
9240
88

思路:本题要用到乘法逆元+费马小定理+快速模取幂算法,这三个之前都没有接触过,这里总结一下
1.乘法逆元
  满足a*k≡1(modp)的k值就是a关于p的乘法逆元。也就是a*kmodp=1。
什么时候要用到乘法逆元呢?
当我们要求(a/b)modp的值,且a很大,无法直接求得a/b的值时,我们就要用到乘法逆元。
我们可以通过求b关于p的乘法逆元k,将a乘上k再模p,即(a*k)modp。其结果与(a/b)modp等价。

证:(其实很简单。。。)
根据b*k≡1(modp)有b*k=p*x+1。
k=(p*x+1)/b。
把k代入(a*k)modp,得:
(a*(p*x+1)/b)modp
=((a*p*x)/b+a/b)modp
=[((a*p*x)/b)modp+(a/b)]modp
=[(p*(a*x)/b)modp+(a/b)]modp
//p*[(a*x)/b]modp=0
所以原式等于:(a/b)modp

这一题中就是要求(a/b)modp(p=9973),那么怎么去求这个乘法逆元呢,这里就要用到费马小定理。
2.费马小定理
--百度百科(http://baike.baidu.com/link?url=L9XOakOsc-s9IK8cnRHJCh060JnJYbIDhkNpVqnIynK1b8_lC3pDALOoSiUa4CRsz9ZXHp2xKp_tVD9IEn9BSa)
费马小定理(FermatTheory)是数论中的一个重要定理,其内容为:假如p是质数,且(a,p)=1,那么a(p-1)≡1(modp)。
即:假如a是整数,p是质数,且a,p互质(即两者只有一个公约数1),那么a的(p-1)次方除以p的余数恒等于1。
这里p=9973,所以a的乘法逆元也就是a^(p-2),所以我们要求这个(同时也要mod9973)。

3.要求a^b%c的时候,当然可以直接循环然后每一步都modc,这样的复杂度就是O(b)了,但是快速模取幂算法可以降低复杂度。

描述如下:

可以把b按二进制展开为:b=p(n)*2^n+p(n-1)*2^(n-1)+…+p(1)*2+p(0)  其中p(i)(0<=i<=n)为0或1  样a^b=a^(p(n)*2^n+p(n-1)*2^(n-1)+...+p(1)*2+p(0))
=a^(p(n)*2^n)*a^(p(n-1)*2^(n-1))*...*a^(p(1)*2)*a^p(0)
  对于p(i)=0的情况,a^(p(i)*2^(i-1))=a^0=1,不用处理
  我们要考虑的仅仅是p(i)=1的情况
  化简:a^(2^i)=a^(2^(i-1)*2)=(a^(p(i)*2^(i-1)))^2
  (这里很重要!!具体请参阅秦九韶算法:http://baike.baidu.com/view/1431260.htm)
  利用这一点,我们可以递推地算出所有的a^(2^i)
  当然由算法1的结论,我们加上取模运算:
  a^(2^i)%c=((a^(2^(i-1))%c)*a^(2^(i-1)))%c
相应的算法将在这道题的AC代码中写出。
importjava.util.Scanner;

publicclassMain{

staticint[]H=newint[100001];
staticintmods=9973;

publicstaticvoidmain(String[]args){
Scannersc=newScanner(System.in);
while(sc.hasNext()){
intN=sc.nextInt();
Stringstr=sc.next();

getHashFactor(str);
for(inti=0;i<N;i++){
intbegin=sc.nextInt()-1;
intend=sc.nextInt();
System.out.println(getHashCode(begin,end));
}
}
}
//保存从开始到当前位置前面字符串的hash值
privatestaticvoidgetHashFactor(Stringss){
intlen=ss.length();
H[0]=1;
for(inti=1;i<=len;i++){
H[i]=H[i-1]*(ss.charAt(i-1)-28)%mods;
}
}
//利用费马小定理和乘法逆元
privatestaticintgetHashCode(intbegin,intend){
return(int)(H[end]*mod_pow(H[begin],mods-2,mods)%mods);
}
//快速模取幂算法
privatestaticlongmod_pow(longx,longn,longmod){
longres=1;
while(n>0){
if((n&1)!=0)res=res*x%mod;
x=x*x%mod;
n>>=1;
}
returnres;
}
}

ProblemD

度熊所居住的D国,是一个完全尊重人权的国度。以至于这个国家的所有人命名自己的名字都非常奇怪。一个人的名字由若干个字符组成,同样的,这些字符的全排列的结果中的每一个字符串,也都是这个人的名字。例如,如果一个人名字是ACM,那么AMC,CAM,MAC,MCA,等也都是这个人的名字。在这个国家中,没有两个名字相同的人。度熊想统计这个国家的人口数量,请帮助度熊设计一个程序,用来统计每一个人在之前被统计过多少次。Input这里包括一组测试数据,第一行包含一个正整数NN,接下来的NN行代表了NN个名字。NN不会超过100,000100,000,他们的名字不会超过40位.Output对于每输入的一个人名,输出一个整数,代表这个人之前被统计了多少次。SampleInput
5
ACM
MAC
BBA
ACM
BAB
SampleOutput
0
1
0
2
1

思路:关键要想到java里面Arrays.sort()函数可以将字符数组按照ascii码排序。排序之后,同一个名字所组成的字符串就相同了,
再利用HashMap,键记录名字,值记录当前已出现的次数,每遇到一次就把值加一,更新map里的值部分。
importjava.io.BufferedReader;
importjava.io.IOException;
importjava.io.InputStreamReader;
importjava.util.Arrays;
importjava.util.HashMap;
importjava.util.Map;publicclassMain{
publicstaticvoidmain(Stringargs[])throwsIOException{
InputStreamReaderis=newInputStreamReader(System.in);
BufferedReaderbr=newBufferedReader(is);
Stringstr="";
while((str=br.readLine())!=null){
intn=Integer.valueOf(str);
Map<String,Integer>m=newHashMap<String,Integer>();
for(inti=0;i<n;i++){
char[]sa=br.readLine().toCharArray();
Arrays.sort(sa);
Stringsorted=newString(sa);
if(m.containsKey(sorted)){
m.put(sorted,m.get(sorted)+1);
System.out.println(m.get(sorted));
}else{
m.put(sorted,0);
System.out.println(0);
}
}
}
}
}

需要注意的是Map里面存储的是对象,所以在将排序好的字符数组put进map的时候,需要新建String对象,而不能直接put,要不然无法判断是否相等,
在利用equals函数判断时,也是如此。看下面的代码即可。
publicclassMain{
publicstaticvoidmain(Stringargs[])throwsIOException{
Stringa="ss";
Stringb="ss";
char[]arr={'s','s'};
Stringc=arr.toString();
Stringd=newString(arr);
if(a.equals(b))
System.out.println("a==b");
else
System.out.println("a!=b");
if(a.equals(c))
System.out.println("a==c");
else
System.out.println("a!=c");
if(a.equals(d))
System.out.println("a==d");
else
System.out.println("a!=d");
if(c.equals(d))
System.out.println("c==d");
else
System.out.println("c!=d");
if("ss".equals("ss"))
System.out.println("ss==ss");
else
System.out.println("ss!=ss");
}
}

打印结果是:

a==b
a!=c
a==d
c!=d
ss==ss

ProblemB

度熊面前有一个全是由1构成的字符串,被称为全1序列。你可以合并任意相邻的两个1,从而形成一个新的序列。对于给定的一个全1序列,请计算根据以上方法,可以构成多少种不同的序列。Input这里包括多组测试数据,每组测试数据包含一个正整数NN,代表全1序列的长度。1\leqN\leq2001≤N≤200Output对于每组测试数据,输出一个整数,代表由题目中所给定的全1序列所能形成的新序列的数量。SampleInput
1
3
5
SampleOutput
1
3
8
Hint
如果序列是:(111)。可以构造出如下三个新序列:(111),(21),(12)。思路:找规律发现就是求斐波那契数列的值。陷阱在于如果使用long类型来保存结果会越界,所以要用BigInteger,还要注意保存之前的结果,就像测试赛的第一题。
importjava.math.BigInteger;
importjava.util.Scanner;publicclassMain{
publicstaticvoidmain(String[]args){
Scannersc=newScanner(System.in);
intmax=1;
System.out.println(Long.MAX_VALUE);
BigInteger[]bi=newBigInteger[201];
bi[0]=newBigInteger("1");
bi[1]=newBigInteger("1");
while(sc.hasNext()){
intn=sc.nextInt();
while(n>max){
bi[max+1]=bi[max].add(bi[max-1]);
max++;
}
System.out.println(bi
);
}
}
}
20160510百度之星测试赛

1004放盘子

小度熊喜欢恶作剧。今天他向来访者们提出一个恶俗的游戏。他和来访者们轮流往一个正多边形内放盘子。最后放盘子的是获胜者,会赢得失败者的一个吻。玩了两次以后,小度熊发现来访者们都知道游戏的必胜策略。现在小度熊永远是先手,他想知道他是否能获胜。注意盘子不能相交也不能和多边形相交也不能放在多边形外。就是说,盘子内的点不能在多边形外或者别的盘子内。Input第一行一个整数TT,表示TT组数据。每组数据包含33个数n,a,r(4\leqn\leq100,0<a<1000,0<r<1000)n,a,r(4≤n≤100,0<a<1000,0<r<1000)nn是偶数,代表多边形的边数,aa代表正多边形的边长,rr代表盘子的半径。Output对于每组数据,先输出一行Case#i:然后输出结果.如果小度熊获胜,输出”Givemeakiss!”否则输出”Iwanttokissyou!”SampleInput
2
4502.5
45.53
SampleOutput
Copy
Case#1:
Givemeakiss!
Case#2:
Iwanttokissyou!
Hint
在第一组样例中,小度熊先在多边形中间放一个盘子,接下来无论来访者怎么放,小度熊都根据多边形中心与来访者的盘子对称着放就能获胜。思路:不得不说最后的Hint至关重要,差点就蒙了。想通了之后非常简单,就是判断所给圆半径是否不大于正多边形的内切圆半径,不大于的话就会赢,反之则会输。  因为不大于的时候,先手总是可以把盘子放在中心,然后在对称位置放置盘子就好了。反之,则一个盘子也放不进去,所以就会输。
importjava.util.Scanner;publicclassMain{
publicstaticvoidmain(String[]args){
Scannersc=newScanner(System.in);
while(sc.hasNext()){
intt=sc.nextInt();
for(inti=1;i<=t;i++){
intn=sc.nextInt();
doublea=sc.nextDouble();
doubler=sc.nextDouble();
doublera=a/2*1/Math.tan(Math.PI/n);
System.out.println("Case#"+i+":");
if(ra>=r)
System.out.println("Givemeakiss!");
else
System.out.println("Iwanttokissyou!");
}
}
}
}

1003IP聚合

当今世界,网络已经无处不在了,小度熊由于犯了错误,当上了度度公司的网络管理员,他手上有大量的IP列表,小度熊想知道在某个固定的子网掩码下,有多少个网络地址。网络地址等于子网掩码与IP地址按位进行与运算后的结果,例如:子网掩码:A.B.C.DIP地址:a.b.c.d网络地址:(A&a).(B&b).(C&c).(D&d)Input第一行包含一个整数TT,(1\leqT\leq50)(1≤T≤50)代表测试数据的组数,接下来TT组测试数据。每组测试数据包含若干行,第一行两个正整数N(1\leqN\leq1000,1\leqM\leq50),MN(1≤N≤1000,1≤M≤50),M。接下来NN行,每行一个字符串,代表一个IP地址,再接下来MM行,每行一个字符串代表子网掩码。IP地址和子网掩码均采用A.B.C.DA.B.C.D的形式,其中A,B,C,DA,B,C,D均为非负整数,且小于等于255。Output对于每组测试数据,输出两行:第一行输出:"Case#i:"。ii代表第ii组测试数据。第二行输出测试数据的结果,对于每组数据中的每一个子网掩码,输出在此子网掩码下的网络地址的数量。SampleInput
2
52
192.168.1.0
192.168.1.101
192.168.2.5
192.168.2.7
202.14.27.235
255.255.255.0
255.255.0.0
42
127.127.0.1
10.134.52.0
127.0.10.1
10.134.0.2
235.235.0.0
1.57.16.0
SampleOutput
Copy
Case#1:
3
2
Case#2:
3
4其实是一个很简单的题,但是容易掉进思维陷阱(当然可能是我太笨了)。一开始想的是将ip分段与掩码按位与,再分段比较。
    再将前一段相同的ip再去比较下一段,思考了半天,这样太复杂,估计会超时,实现起来也有难度。
正确的思路:将每一个ip和子网掩码组合成int类型,int类型也是32位,ip和子网掩码都是32位,所以通过移位操作刚好能组合成int,
再将组合之后的int类型的ip与子网掩码按位与,结果放入set里面,set的大小即结果了。
importjava.io.IOException;
importjava.util.HashSet;
importjava.util.Scanner;
importjava.util.Set;publicclassMain{
publicstaticvoidmain(String[]args)throwsIOException{
Scannersc=newScanner(System.in);
while(sc.hasNext()){
intt=sc.nextInt();
for(inti=1;i<=t;i++){
intn=sc.nextInt();
intm=sc.nextInt();
sc.nextLine();
String[]ips=newString[4];
String[]masks=newString[4];
int[]ipToInt=newint
;
for(intj=0;j<n;j++){
ips=sc.nextLine().split("\\.");
//这种写法比较好
for(Stringip:ips){
ipToInt[j]=(ipToInt[j]<<8)+Integer.valueOf(ip);
}
}
System.out.println("Case#"+i+":");
int[]ans=newint[m];
for(intj=0;j<m;j++){
masks=sc.nextLine().split("\\.");
//这种写法必须加括号
intmaskToInt=(Integer.valueOf(masks[0])<<24)+
(Integer.valueOf(masks[1])<<16)+
(Integer.valueOf(masks[2])<<8)+
(Integer.valueOf(masks[3]));
Set<Integer>set=newHashSet<Integer>();
for(intk=0;k<n;k++){
set.add(ipToInt[k]&maskToInt);
}
ans[j]=set.size();
}
for(intj=0;j<m;j++){
System.out.println(ans[j]);
}
}
}
}
}

代码中需要注意的就是  1.ip组合成int时的写法,代码中有两种方式,第二种方式必须加括号,要不然结果不正确。            2.split函数分割点时,记得加上转义符“\\”。

1002列变位法解密

列变位法是古典密码算法中变位加密的一种方法,具体过程如下将明文字符分割成个数固定的分组(如5个一组,5即为密钥),按一组一行的次序整齐排列,最后不足一组不放置任何字符,完成后按列读取即成密文。比如:原文:123456789密钥:4变换后的矩阵:123456789xxx(最后的几个x表示无任何字符,不是空格,不是制表符,就没有任何字符,下同)密文:159263748再比如:原文:Hello,welcometomydreamworld!密钥:7变换后的矩阵:Hello,welcometomydreamworld!xx密文:Hwdoeetrrlloellcadoomm!,myew实现一个利用列变位法的加密器对Bob来说轻而易举,可是,对Bob来说,想清楚如何写一个相应的解密器似乎有点困难,你能帮帮他吗?Input第一行一个整数TT,表示TT组数据。每组数据包含22行第一行,一个字符串s(1\leq|s|\leq1e5)s(1≤∣s∣≤1e5),表示经过列变位法加密后的密文第二行,一个整数K(1\leqK\leq|s|)K(1≤K≤∣s∣),表示原文在使用列变位法加密时的密钥输入保证密文字符串中只含有ASCII码在[0x20,0x7F)[0x20,0x7F)范围内的字符Output对于每组数据,先输出一行Case#i:然后输出一行,包含一个字符串s_decrypt,表示解密后得到的明文SampleInput
4
159263748
4
Hwdoeetrrlloellcadoomm!,myew
7
Toodmingisbest
16
sokaisan
1
SampleOutput
Case#1:
123456789
Case#2:
Hello,welcometomydreamworld!
Case#3:
Toodmingisbest
Case#4:
sokaisan
思路:属于一看题就知道大概的思路的,但是bug-free对于我来说写起来还有难度。调试了好多遍才成功,边界情况处理的不是很好,暂时不想再研究了,好歹也是过了。
值得注意的地方是StringBuilder的使用,如果是直接新建一个String的话,会超时。
importjava.io.BufferedReader;
importjava.io.IOException;
importjava.io.InputStreamReader;publicclassMain{
publicstaticvoidmain(String[]args)throwsIOException{
InputStreamReaderisr=newInputStreamReader(System.in);
BufferedReaderbr=newBufferedReader(isr);
Stringstr="";
while((str=br.readLine())!=null){
intt=Integer.parseInt(str);
for(inti=1;i<=t;i++){
Strings=br.readLine();
intk=Integer.parseInt(br.readLine());
if(k>=s.length()||k==1){
System.out.println("Case#"+i+":");
System.out.println(s);
}else{
intmod=s.length()%k;
introw=s.length()/k;
if(mod!=0){
row++;
}else{
mod=k;
}
intj=0,p=0,l=0;
StringBuildersb=newStringBuilder();
while(p<row){
l=0;
while(l<=mod){
sb.append(s.charAt(l*row+p));
j=l*row+p;
l++;
if(l==mod&&(p==row-1||mod==k))
break;
}
if(sb.length()==s.length())
break;
while((j+row-1<s.length())&&(mod!=k)){
sb.append(s.charAt(j+row-1));
j=j+row-1;
}
p++;
}
System.out.println("Case#"+i+":");
System.out.println(sb.toString());
}
}
}
}
}

1001大搬家

ProblemDescription近期B厂组织了一次大搬家,所有人都要按照指示换到指定的座位上。指示的内容是坐在位置ii上的人要搬到位置jj上。现在B厂有NN个人,一对一到NN个位置上。搬家之后也是一一对应的,改变的只有位次。在第一次搬家后,度度熊由于疏忽,又要求大家按照原指示进行了一次搬家。于是,机智的它想到:再按这个指示搬一次家不就可以恢复第一次搬家的样子了。于是,B厂史无前例的进行了连续三次搬家。虽然我们都知道度度熊的“机智”常常令人堪忧,但是不可思议的是,这回真的应验了。第三次搬家后的结果和第一次的结果完全相同。那么,有多少种指示会让这种事情发生呢?如果两种指示中至少有一个人的目标位置不同,就认为这两种指示是不相同的。Input第一行一个整数TT,表示T组数据。每组数据包含一个整数N(1\leqN\leq1000000)N(1≤N≤1000000)。Output对于每组数据,先输出一行Case#i:然后输出结果,对10000000071000000007取模。SampleInput
2
1
3
SampleOutput
Case#1:
1
Case#2:
4思路:直接想的可能是怎么才能搬家三次的结果和搬家一次的结果相同,但是实际上可以简化为搬家两次的结果和搬家之前相同。
要出现这样的情况,那第一次搬家i-j必须满足i==j或者i-j&&j-i(i!=j).
当给定为N个人搬家时有ans
种满足条件的可能,假设第一个人是1-1,也就是位置不变,那么剩下的人可能的情况就是ans[N-1]种。
当第一个人是1-j(j!=1)时,那么必定有j-1。所以还剩下N-2个人,所以就是ans[N-2],又因为此时j有N-1(2-N)种可能。
可得出dp公式ans
=ans[N-1]+(N-1)*ans[N-2];
初始值ans[1]=1;ans[2]=2;利用递归或者dp即可解决,但是递归会超时,dp才是正道。
importjava.util.Scanner;publicclassMain{
publicstaticvoidmain(String[]args){
Scannersc=newScanner(System.in);
while(sc.hasNext()){
intt=sc.nextInt();
long[]ans=newlong[1000001];
longmod=1000000007l;
ans[1]=1;
ans[2]=2;
intm=3;
for(inti=1;i<=t;i++){
intn=sc.nextInt();
while(m<=n){
ans[m]=mod(ans[m-1]+(m-1)*ans[m-2]);//用mod函数会稍微快点,但是不影响结果
m++;
}
System.out.println("Case#"+i+":");
System.out.println(ans
);
//    System.out.println("Case#"+i+":\n"+ans
);//这种形式会报格式错误
}
}
}
publicstaticlongmod(longi){
returni%1000000007;
}
}/**TLE递归影响时间,改成dppublicstaticintfind(intn){
if(n==1)
return1;
if(n==2)
return2;
else
returnmod(find(n-1))+mod((n-1)*find(n-2));
}
*/


代码中的斜体部分应该放到for循环外,这样就可以保存ans[]数组的结果,在下一个测试用例时就可以直接利用了,如果放在for循环内,就会超时。ps:最后的打印换成代码中的另一种形式就会格式错误PresentationError,不知道为什么。

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: