1114 codeforces题目摘要

首先是简化代码,如何简化,以及c++内置代码的精简与下标的利用,这些都是要重新去抠的细节

1114D题,首先必须是邻近元素的操作,发现,寻找最频繁的元素是一个正确的选择,另外就是发现其余元素都需要操作且只需要操作一次,证明显然

根据题解的代码写出了自己的一份代码

 1 #include<bits/stdc++.h>
 2 typedef long long ll;
 3 int num[(int)1e6+5];
 4 int occur[(int)1e6+5];
 5 int MAXN=(int)2e5+5;
 6 
 7 int main(){
 8     int n;
 9     std::cin>>n;
10     //long long max=0,maxp;
11     for(int i=1;i<=n;i++)
12     {
13         scanf("%d",&num[i]);
14         ++occur[num[i]];
15     }
16 
17     int max=std::max_element(occur,occur+MAXN)-occur;
18     int pos=std::find(num+1,num+n+1,max)-num;
19     //std::cout<<max;
20     std::cout<<n-occur[max]<<"\n";
21     for(int i=pos-1;i>=1;i--){
22         if(num[i]<num[i+1])
23         {
24             std::cout<<1<<" "<<i<<" "<<i+1<<"\n";
25         }
26         else
27         {
28             std::cout<<2<<" "<<i<<" "<<i+1<<"\n";
29         }
30         num[i]=num[i+1];
31     }
32     for(int i=pos+1;i<=n;i++){
33         if(num[i]==num[i-1]) continue;
34         if(num[i]<num[i-1])
35         {
36             std::cout<<1<<" "<<i<<" "<<i-1<<"\n";
37         }
38         else
39         {
40             std::cout<<2<<" "<<i<<" "<<i-1<<"\n";
41         }
42         num[i]=num[i-1];
43     }
44     return 0;
45 }

猜你喜欢

转载自www.cnblogs.com/rign/p/10658097.html