杭电-1950Bridging signals(LIS) ╰+攻爆jí腚メ 2022-08-09 18:57 96阅读 0赞 # Bridging signals # **Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)** Total Submission(s): 1258 Accepted Submission(s): 819 Problem Description 'Oh no, they've done it again', cries the chief designer at the Waferland chip factory. Once more the routing designers have screwed up completely, making the signals on the chip connecting the ports of two functional blocks cross each other all over the place. At this late stage of the process, it is too expensive to redo the routing. Instead, the engineers have to bridge the signals, using the third dimension, so that no two signals cross. However, bridging is a complicated operation, and thus it is desirable to bridge as few signals as possible. The call for a computer program that finds the maximum number of signals which may be connected on the silicon surface without rossing each other, is imminent. Bearing in mind that there may be housands of signal ports at the boundary of a functional block, the problem asks quite a lot of the programmer. Are you up to the task? ![1950-1.jpg][] Figure 1. To the left: The two blocks' ports and their signal mapping (4,2,6,3,1,5). To the right: At most three signals may be routed on the silicon surface without crossing each other. The dashed signals must be bridged. A typical situation is schematically depicted in figure 1. The ports of the two functional blocks are numbered from 1 to p, from top to bottom. The signal mapping is described by a permutation of the numbers 1 to p in the form of a list of p unique numbers in the range 1 to p, in which the i:th number pecifies which port on the right side should be connected to the i:th port on the left side. Two signals cross if and only if the straight lines connecting the two ports of each pair do. Input On the first line of the input, there is a single positive integer n, telling the number of test scenarios to follow. Each test scenario begins with a line containing a single positive integer p<40000, the number of ports on the two functional blocks. Then follow p lines, describing the signal mapping: On the i:th line is the port number of the block on the right side which should be connected to the i:th port of the block on the left side. Output For each test scenario, output one line containing the maximum number of signals which may be routed on the silicon surface without crossing each other. Sample Input 4 6 4 2 6 3 1 5 10 2 3 4 5 6 7 8 9 10 1 8 8 7 6 5 4 3 2 1 9 5 8 9 2 3 1 7 4 6 Sample Output 3 9 1 4 就是求最长上升子序列的,但是用一般的O(n\*n)会超时 #include<cstdio> #include<cstring> #include<algorithm> using namespace std; int a[41000]; int main() { int N,n,i,j,t; scanf("%d",&N); while(N--) { scanf("%d",&n); scanf("%d",&t); a[0]=t; int top=1; for(i=1;i<n;i++) { scanf("%d",&t); if(t>=a[top-1]) a[top++]=t; else { int r=upper_bound(a,a+top-1,t)-a;//这里调用upper_bound函数求出大于t的第一个元素的位置 a[r]=t; } } printf("%d\n",top); } return 0; } 不调用函数,二分法: #include<cstdio> #include<cstring> #include<algorithm> using namespace std; int a[41000]; int main() { int N,n,i,j,t; scanf("%d",&N); while(N--) { scanf("%d",&n); scanf("%d",&t); a[0]=t; int top=1; for(i=1;i<n;i++) { scanf("%d",&t); if(t>=a[top-1]) a[top++]=t; else { int z=0,q=top-1; while(z<=q) { int mid=(z+q)/2; if(a[mid]<t) z=mid+1; else q=mid-1; } a[z]=t; } } printf("%d\n",top); } return 0; } 下面附上一般代码求最长上升子序列: #include<cstdio> #include<cstring> #include<algorithm> using namespace std; int num[41000],b[41000]; int main() { int N,i,j,n; scanf("%d",&N); while(N--) { scanf("%d",&n); for(i=0;i<n;i++) scanf("%d",&num[i]); b[0]=1; int max=0; for(i=1;i<n;i++) { b[i]=1; for(j=0;j<i;j++) if(num[i]>=num[j]&&b[i]<b[j]+1) b[i]=b[j]+1; if(b[i]>max) max=b[i]; } printf("%d\n",max); } return 0; } [1950-1.jpg]: /images/20220731/744579e86a014bebb8ec6502ff8e4146.png
相关 杭电1061 Rightmost Digit Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (J 布满荆棘的人生/ 2022年09月17日 05:27/ 0 赞/ 282 阅读
相关 杭电-1950Bridging signals(LIS) Bridging signals Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 65536/32768 K ( ╰+攻爆jí腚メ/ 2022年08月09日 18:57/ 0 赞/ 97 阅读
相关 杭电1039 Easier Done Than Said? Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 6553 一时失言乱红尘/ 2022年06月05日 12:48/ 0 赞/ 287 阅读
相关 杭电1026 Ignatius and the Princess I Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 6553 快来打我*/ 2022年06月04日 05:53/ 0 赞/ 306 阅读
相关 杭电oj Problem Title 1 Pro. ID 1000 A+B Problem include<stdio.h> int main() { £神魔★判官ぃ/ 2022年05月15日 16:14/ 0 赞/ 334 阅读
相关 HDU 1950 Bridging signals Bridging signals Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 65536/32768 柔情只为你懂/ 2022年03月29日 05:50/ 0 赞/ 107 阅读
相关 杭电1060 此题是一道数学题,也是一道技巧题,也是不能直接算的,否则会超时的!!! 此题思路: 设n^n=d.xxxx\10^(k-1),其中k表示n^n的位数; d.xxxx 痛定思痛。/ 2021年12月01日 22:40/ 0 赞/ 326 阅读
相关 杭电2075 此题真的是简单的再不能简单了!呵呵!我一直纠结,出这样的题是什么意思呢?不懂!哎,不说那些废话了,直接 ac吧!呵呵! \include<iostream> using 今天药忘吃喽~/ 2021年12月01日 22:38/ 0 赞/ 311 阅读
相关 杭电2078 说实话,此题是一道有严重bug的问题,对于xhd没晚能复习的科目数m根本就没用上!!!哎不管那么些了,反正ac了!呵呵!此题这样想xhd得复习效率是前一课程和后一课程复习效率差 ╰+攻爆jí腚メ/ 2021年12月01日 22:38/ 0 赞/ 355 阅读
相关 杭电2090 此题就是一道令人无法琢磨的题!哎!!我简直就无语了!!呵呵!竟然能出这题。。。。 废话少说,直接ac!!! \\\ 此题要想输出结果,还需要注意一下! 在linux 约定不等于承诺〃/ 2021年12月01日 21:12/ 0 赞/ 369 阅读
还没有评论,来说两句吧...