首页 > 其他 > 详细

1032 Sharing (25分)

时间:2020-03-26 20:44:51      阅读:54      评论:0      收藏:0      [点我收藏+]

技术分享图片

 

这题第四个测试点是格式控制...其实看题的时候就想到要注意这一点,写着写着就忘了。cin,cout依然容易超时。刚开始第20行写成 scanf("%d%c%d",&add1,&NODE.c,&NODE.next);  没办法正常读取,想来是因为NODE.c吸收了空格?后来改成 scanf("%d %c %d",&add1,&NODE.c,&NODE.next);  就好了。我依然不敢开大数组...柳神开了个10的5次方的数组...大手笔。也不知道数组大小有无上限。我对这题的想法是:用结构体和map存储节点信息,包含下一节点的地址和该节点在两个单词出现的次数。遍历第一个单词,令其所有节点cnt为1。再遍历第二个单词,令其节点cnt自增1。当发现了第一个cnt为2即出现次数等于2的节点,找到了题目要求的地址。这样的思路其实有缺陷,但可以过所有测试点,应该是测试点太单一了...如果这题可以说简单,那就是因为测试点设置的不够好...

 1 #include <iostream>
 2 #include<cstdio>
 3 #include<string>
 4 #include<map>
 5 using namespace std; 
 6 struct node{
 7     int next,cnt;
 8     char c;
 9     node(){next=cnt=0;
10     }
11 };
12 int main()
13 {   
14   int s1,s2,n;
15   scanf("%d%d%d\n",&s1,&s2,&n);
16   map<int,node> origin;
17   node NODE;
18   int add1;
19   for(int i=0;i<n;i++){
20       scanf("%d %c %d",&add1,&NODE.c,&NODE.next); 
21      origin[add1]=NODE; 
22   }
23   int temp=s1;
24   while(temp!=-1){
25     origin[temp].cnt++;
26     temp=origin[temp].next;
27   }
28   temp=s2;
29   int flag=0,res=0;
30   while(temp!=-1){
31     origin[temp].cnt++;
32     if(origin[temp].cnt==2){
33         flag=1;
34         res=temp;
35         break;
36     }
37     temp=origin[temp].next;
38   }
39   if(flag==1)
40     printf("%05d",temp);
41     
42   else
43    cout<<"-1";
44   return 0;
45 }

 

1032 Sharing (25分)

原文:https://www.cnblogs.com/wsshub/p/12576942.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!