Codeforces Gym101606 D.Deranging Hat (2017 United Kingdom and Ireland Programming Contest (UKIEPC 2017))
2024-09-08 03:56:08
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 }
最新文章
- 【精粹系列】Mysql精粹
- 服务器设置SSH 长连接
- HDU 4778 Gems Fight!(DP)
- 重启EBS
- 初探JAVA中I/O流(一)
- 团队项目——二手书店(NABC分析)
- Google搜索技巧-从入门到精通(从此学习进步、工作顺心)
- libvirt虚拟系统如何增加usb设备
- Oracle导入导出之dmp
- about semget
- jsp页面中frameset的使用方法
- C# 保存窗口为图片(保存纵断面图)
- cocos2dx 3.0 飞机大战
- file_get_contents无法请求https连接的解决方法
- Example017简单的下拉框
- 关于DOM中的model(将元素转成对象进行操作)
- Linux 安装及配置 Nginx + ftp 服务器
- swoole深入学习 2. tcp Server和tcp Client
- win10常用快捷命令——运行面板启动
- Spring全局异常处理的三种方式