Codeforces Gym101606 D.Deranging Hat (2017 United Kingdom and Ireland Programming Contest (UKIEPC 20...

 

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 }

 

转载于:https://www.cnblogs.com/ZERO-/p/9703438.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值