发布时间 : 星期六 文章历年ACM更新完毕开始阅读
w=w+1; lookup(k,b[k][c],j); } else { w=-1; return w; exit(0); } }
void main() { int i,j; //scanf(\ FILE *fp; fp=fopen(\ fscanf(fp,\ //scanf(\ for(i=1;i<=M;i++) { w=0; fscanf(fp,\ for(j= 1; j<= N; j++) fscanf(fp,\ //for(j=1;j<=N;j++) // scanf(\ for(j=1;j<=N;j++) flag[j]=0; lookup(i,A,B); printf(\ } fclose(fp); }
奇特的艺术品
Dr.Kong设计了一件艺术品,该艺术品由N个构件堆叠而成,N个构件从高到低按层编号依次为1,2,……,N。艺术品展出后,引起了强烈的反映。Dr.Kong观察到,人们尤其对作品的高端部分评价甚多。
狂热的Dr.Kong一激动,对组成该艺术品的N个构件重新组合,比如:把第6层到第12层的构件搬下来,想一想,然后整体放到剩下构件的第7层下面;过一会儿,又把第2层到第9层的构件搬下来,整体放到剩下构件的第1层下面等等。于是,Dr.Kong在进行了连续若干次“搬来搬去”后,还是这N个构件,又诞生了一件新的艺术品。编程:请输出新的艺术品最高十层构件的编号。 【标准输入】
第一行: N K 表示构件的总数和“搬来搬去”的总次数
第2~K+1行:A B C 表示要搬动的构件(即从第A层到第B层)整个放在第C层下面;
如果C等于0,则要搬动的构件将放到最高层。
【标准输出】
由十行组成,分别为组成新艺术品的第一层到第十层构件的编号。 【约束条件】
(1) 10≤N≤20000 1≤k≤1000
(2) 1≤A≤B≤N, 0≤C≤N-(B-A+1) 【 样 例 】
标准输入 13 3 6 12 1 2 9 0 10 13 8 6 7 8 9 10 11 12 2 3 4 #include\#define N 200000 int n,k,a,b,c;
int aa[N+1],cc[N+1];
void move(int a,int b,int c,int n) { int i,j,m; for(i=a;i<=b;i++) { cc[i-a+1]=aa[i]; } if(cc;j--) { aa[j+b-a+1]=aa[j]; } } else if(c>=a) { for(i=b+1;i<=b+c-a+1;i++) { aa[i-b+a-1]=aa[i];
标准输出
} } for(m=1;m<=b-a+1;m++) { aa[c+m]=cc[m]; } return; }
void main() { int i,j; scanf(\ for(j=1;j<=n;j++) aa[j]=j; for(i=1;i<=k;i++) { scanf(\ move(a,b,c,n); for(i=1;i<=10;i++) printf(\}
壮观的瓷器广场
【问题描述】
最近,某瓷都为了体现“千年瓷都” 的风貌,将要建立一个壮观的瓷器广场迎接来自各国的宾客。,顾问Dr.Kong提出了一项建议:在巨大的广场南面展示N件高度不等的瓷器灯柱。夜间,这些瓷器灯柱逐一闪亮,由低至高,如此场景必将十分的绚丽夺目。然而,在瓷器灯柱运来安放后,Dr.Kong才发现粗心的工人并没有按照从低到高的顺序安放瓷器灯柱。由于瓷器灯柱已经竖立起来,不可能全部推倒重新安放,人力又搬不动。因此,Dr.Kong只能借助巨型吊车每次将两个瓷器灯柱的位置小心翼翼地进行交换。
例如,有3个瓷器灯柱初始时高度顺序是:3 1 2。可以先用吊车交换后两个灯柱的位置,得到3 2 1,再交换第一和第三个灯柱,得到最终序列1 2 3。 毕竟,用吊车交换灯柱位置可不是一件容易的事情,灯柱越高其重量越大,交换的难度也就越高。Dr.Kong估算出,每一次交换的难度等于交换的两个灯柱的高度的和。而整个交换方案的难度等于每次交换难度的总和。 例如先前的交换方案。原先3 1 2,交换后两个(难度为1+2=3),得到3 2 1,再交换第一和第三个(难度为3+1 = 4),得到1 2 3。因此,该方案的难度为3+4 =7。为了使交换工作尽快完成,难度最低的交换方案自然是首选了。Dr.Kong虽然知道一些选择,冒泡,归并,快速甚至堆排序等。然而,在该问题面前,这些方法看起来似乎毫无用武之地!你有何办法? 【标准输入】
第一行: M 表示以下有M组测试数据(0 头一行: N (表示瓷器灯柱的数目1 ≤ N ≤ 100 ) 下一行: H1 H2 ….Hn (表示依次安放灯柱的高度, 1≤Hi≤ 1000,) 【标准输出】 输出有M行,第i行为仅包含一个整数, 为第i组测试数据可得到的交换方案的最低难度值。 【 样 例 】 标准输入 2 3 3 1 2 4 30 40 10 23 #include \#include \#include \struct data { int loc;//位置 int value;//值 }h[101]; void sort(struct data h[],int n) { int i,j; struct data dk; for(i=1;i for(j=i+1;j<=n;j++) { if(h[i].value>h[j].value) { dk=h[i]; h[i]=h[j]; h[j]=dk; } } } return; } main() { int m,n,i,j,k,t,sum=0; cin>>m; for(i=1;i<=m;i++) { cin>>n; sum=0; for(j=1;j<=n;j++) { cin>>h[j].value; 标准输出 7 103