D Deranging Hat

这个题简直了,本来想的是冒泡排序然后逆着输出来的,后来发现不对,因为题目上求的是最优解,而且冒泡的话,输出结果有的超出10000行了,所以就是把一开始的,排好序的字母标记一下位置,然后再把要求的串的位置记录一下,从大到小输出来,鬼知道这道题到底要干嘛,反正有人写出来了而且他自己都解释不清楚他为什么这么写。。。

代码:(不是我的)

 1 #include<iostream>
2 #include<algorithm>
3 #include<cstring>
4 #include<cstdio>
5 #include<math.h>
6 #include<cstdlib>
7 #include<set>
8 #include<map>
9 #include<stack>
10 #include<queue>
11 #include<vector>
12 #include<set>
13 #define ll long long int
14 #define INF 0x3f3f3f3f
15 #define mod 1000000007
16 #define me(a,b) memset(a,b,sizeof(a))
17 using namespace std;
18 struct node{
19 char str;
20 int pi;
21 }s[1005];
22 char str[1005];
23 int a[10005],b[10005],c;
24 bool cmp(node a,node b){
25 if(a.str!=b.str) return a.str<b.str;
26 return a.pi<b.pi;
27 }
28 int main(){
29 scanf("%s",&str);
30 int l=strlen(str);
31 for(int i=0;i<l;i++){
32 s[i].str=str[i];
33 s[i].pi=i;
34 }
35 sort(s,s+l,cmp);
36 c=0;
37 int n[1005];
38 for(int i=0;i<l;i++){
39 n[s[i].pi]=i;
40 }
41 for(int i=0;i<l;i++){
42 if(s[i].pi!=i){
43 a[c]=i;
44 b[c]=s[i].pi;
45 c++;
46 int pre=s[i].pi;
47 int now=n[i];
48 swap(s[now],s[i]);
49 n[pre]=now;
50 }
51 }
52 for(int i=c-1;i>=0;i--){
53 printf("%d %d\n",b[i]+1,a[i]+1);
54 }
55 return 0;
56 }

最新文章

  1. 【精粹系列】Mysql精粹
  2. 服务器设置SSH 长连接
  3. HDU 4778 Gems Fight!(DP)
  4. 重启EBS
  5. 初探JAVA中I/O流(一)
  6. 团队项目——二手书店(NABC分析)
  7. Google搜索技巧-从入门到精通(从此学习进步、工作顺心)
  8. libvirt虚拟系统如何增加usb设备
  9. Oracle导入导出之dmp
  10. about semget
  11. jsp页面中frameset的使用方法
  12. C# 保存窗口为图片(保存纵断面图)
  13. cocos2dx 3.0 飞机大战
  14. file_get_contents无法请求https连接的解决方法
  15. Example017简单的下拉框
  16. 关于DOM中的model(将元素转成对象进行操作)
  17. Linux 安装及配置 Nginx + ftp 服务器
  18. swoole深入学习 2. tcp Server和tcp Client
  19. win10常用快捷命令——运行面板启动
  20. Spring全局异常处理的三种方式

热门文章

  1. LeetCode935
  2. 初学Python02
  3. 01 Django基础知识
  4. sqli-labs less1 &amp;&amp;less3&amp;&amp;less4学习心得
  5. 图上两点之间的第k最短路径的长度 ACM-ICPC 2018 沈阳赛区网络预赛 D. Made In Heaven
  6. Java技术——Java反射机制分析
  7. BZOJ 3590: [Snoi2013]Quare
  8. WIN 备份 重装
  9. tarjan - tarjan的几种用法
  10. SDOJ 3742 黑白图