洛谷P1124 文件压缩 模拟

洛谷P1124 文件压缩
模拟

 1 #include <bits/stdc++.h>
 2 #define For(i,j,k) for(int i=j;i<=k;i++)
 3 using namespace std ;
 4
 5 const int N = 10011 ;
 6 int n,mid,p ;
 7 char s[N] ;
 8 int le[N],ri[N],sum[N],ans[N] ;
 9
10 inline int read()
11 {
12     int x = 0 , f = 1 ;
13     char ch = getchar() ;
14     while(ch<‘0‘||ch>‘9‘) { if(ch==‘-‘) f = -1 ; ch = getchar(); }
15     while(ch>=‘0‘&&ch<=‘9‘) { x = x * 10+ch-48 ; ch = getchar(); }
16     return x * f ;
17 }
18
19 int main()
20 {
21     n = read() ; mid = n ;
22     scanf("%s",s+1) ;
23     For(i,1,n)
24         le[ i ] = ri[ i ] = s[ i ] - 96 ;         //  这题  p 会等于  0
25     p = read() ;
26     if(n==1) {
27         printf("%c",ri[ n ]+96) ;
28         return 0 ;
29     }
30     sort(le+1,le+n+1) ;
31     printf("%c",ri[ p ]+96) ;
32     For(i,1,n)
33         sum[ le[ i ] ] = i ;
34
35     For(i,1,n)
36         if(le[i]==ri[p]) {
37             ans[ n ] = ri[ i ] ;
38             p = ri[ i ] ;
39             break ;
40         }
41
42     while(1) {
43         if(n<=2) break ;
44         n-- ;
45         ans[ n ] = ri[ sum[ p ] ] ;
46         sum[p]-- ;
47         p = ans[ n ] ;
48     }
49     For(i,2,mid) printf("%c",ans[ i ]+96) ;
50     return 0 ;
51 }
时间: 2024-10-04 18:03:36

洛谷P1124 文件压缩 模拟的相关文章

洛谷 P1124 文件压缩

P1124 文件压缩 题目背景 提高文件的压缩率一直是人们追求的目标.近几年有人提出了这样一种算法,它虽然只是单纯地对文件进行重排,本身并不压缩文件,但是经这种算法调整后的文件在大多数情况下都能获得比原来更大的压缩率. 题目描述 该算法具体如下:对一个长度为n的字符串S,首先根据它构造n个字符串,其中第i个字符串由将S的前i-1个字符置于末尾得到.然后把这n个字符串按照首字符从小到大排序,如果两个字符串的首字符相等,则按照它们在S中的位置从小到大排序.排序后的字符串的尾字符可以组成一个新的字符串

洛谷P1124 文件压缩

https://www.luogu.org/problem/show?pid=1124 题目背景 提高文件的压缩率一直是人们追求的目标.近几年有人提出了这样一种算法,它虽然只是单纯地对文件进行重排,本身并不压缩文件,但是经这种算法调整后的文件在大多数情况下都能获得比原来更大的压缩率. 题目描述 该算法具体如下:对一个长度为n的字符串S,首先根据它构造n个字符串,其中第i个字符串由将S的前i-1个字符置于末尾得到.然后把这n个字符串按照首字符从小到大排序,如果两个字符串的首字符相等,则按照它们在S

AC日记——神奇的幻方 洛谷 P2615(大模拟)

题目描述 幻方是一种很神奇的N*N矩阵:它由数字1,2,3,……,N*N构成,且每行.每列及两条对角线上的数字之和都相同. 当N为奇数时,我们可以通过以下方法构建一个幻方: 首先将1写在第一行的中间. 之后,按如下方式从小到大依次填写每个数K(K=2,3,…,N*N): 1.若(K−1)在第一行但不在最后一列,则将K填在最后一行,(K−1)所在列的右一列: 2.若(K−1)在最后一列但不在第一行,则将K填在第一列,(K−1)所在行的上一行: 3.若(K−1)在第一行最后一列,则将K填在(K−1)

洛谷P1738 洛谷的文件夹

原题目:点我 题目是一个略水的题,我机制地用面向对象做了...所以代码量急剧加大,100行233 模拟即可,字符串处理麻烦点.如果没有找到子文件夹就新建文件夹,如果有就进入该文件夹. 提示:高能,指针+动态内存,用数组太low(在noip中用数组才是王道!) #include <iostream> #include <vector> #include <string> using namespace std; int foldercnt=-1;//根目录已经算了一个了,

【洛谷试炼场】【模拟专题】P1012 拼数

[题目描述] 设有n个正整数(n≤20),将它们联接成一排,组成一个最大的多位整数. 例如:n=3时,3个整数13,312,343联接成的最大整数为:34331213 又如:n=4时,4个整数7,13,4,246联接成的最大整数为:7424613 [输入格式] 第一行,一个正整数n. 第二行,n个正整数. [输出格式] 一个正整数,表示最大的整数 [输入样例#1] 3 13 312 343 [输出样例#1]34331213 本题思路: 水题.用字符串存储 一个自定义排序搞定:两个字符串在 正着方

2019暑假集训 文件压缩

题目背景 提高文件的压缩率一直是人们追求的目标.近几年有人提出了这样一种算法,它虽然只是单纯地对文件进行重排,本身并不压缩文件,但是经这种算法调整后的文件在大多数情况下都能获得比原来更大的压缩率. 题目描述 该算法具体如下:对一个长度为nn的字符串SS,首先根据它构造nn个字符串,其中第ii个字符串由将SS的前i-1i−1个字符置于末尾得到.然后把这nn个字符串按照首字符从小到大排序,如果两个字符串的首字符相等,则按照它们在SS中的位置从小到大排序.排序后的字符串的尾字符可以组成一个新的字符串S

洛谷P1290 欧几里德的游戏 数学 博弈论 模拟

洛谷P1290 欧几里德的游戏 数学 博弈论 模拟 这道题我们因为当 x 大于 y 时 你也只能在合法范围 内取 1 个 y 两个 y 也就是说 能取的y大于等于2时,则你本质不同的取法共有两种,此时你必定获胜,因为本质不同,而在最优策略下,则说明胜利者也不同,也就是说这时候你可以决定自己的输赢 ,我们称这种必胜局为 v 局 2.但是如果 v 局后面还有v 局怎么办,这个不必担心,因为先拿到 v局的人,有两种本质不同的取法,也就是说 他可以控制自己下次必定拿到 v 局,这样就 能确保胜利了 所以

洛谷P1449 后缀表达式 栈 模拟 字符串

洛谷P1449 后缀表达式 栈 模拟 字符串 栈模拟一下 碰到 . 如果输入的是数字就把数字放进栈中 1 #include <cstdio> 2 #include <cstring> 3 #include <cmath> 4 #include <cstdlib> 5 #include <string> 6 #include <algorithm> 7 #include <iomanip> 8 #include <io

洛谷P1159 排行榜 模拟

洛谷P1159 排行榜 模拟 DOWN的人 正序 排到前面 UP的人 正序 排在后面 然而要注意 SAME 是不变的 所以说SAME 的位置是固定的,这个要特殊做 1 #include <cstdio> 2 #include <cstring> 3 #include <string> 4 #include <iostream> 5 using namespace std ; 6 7 int n,topu,topd ; 8 string up[101],dow