https://www.acwing.com/activity/content/problem/content/7732/
unordered_set的用法
代码
#include <iostream>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <unordered_set>
using namespace std;
const int N = 1010;
unordered_set<string> mp;//用于防止去重
int n;
void h(string s[])
{
swap(s[0][1],s[1][1]);
swap(s[0][0],s[1][0]);
swap(s[0][1],s[1][0]);
}
int main()
{
//定义两个数组
scanf("%d", &n);
for(int i=0;i<n;i++)
{
string s[2],t;//在这里t是用来存入**号的
//输入这两个字符串
cin >>s[0]>>s[1];
t=s[0]+s[1];
//然后我们在这里将每个数字的最小值存入进去
for (int j = 0; j < 3; j ++ )
{
//h函数是用来做每一次变换的
h(s);
t=min(t,s[0]+s[1]);
}
mp.insert(t);
cin>>t;
}
cout << mp.size()<<endl;
return 0;
}
大根堆与小根堆
priority_queue<int,vector<int>,less<int>>s;//大根堆
priority_queue<int,vector<int>,greater<int>>s;//小根堆
next_permutation 用法
输出序列{1,2,3,4}字典序的全排列
#include <iostream>
#include<algorithm>
using namespace std;
int main(int argc, char** argv) {
int a[4]={1,2,3,4};
sort(a,a+4);
do{
//cout<<a[0]<<" "<<a[1]<<" "<<a[2]<<" "<<a[3]<<endl;
for(int i=0;i<4;i++)
cout<<a[i]<<" ";
cout<<endl;
}while(next_permutation(a,a+4));
return 0;
}
输入任意一个字符串,输出其字典序的全排列
#include <iostream>
#include<algorithm>
using namespace std;
int main(int argc, char** argv) {
string str;
cin>>str;
sort(str.begin(),str.end());
do{
cout<<str<<endl;
}while(next_permutation(str.begin(),str.end()));
return 0;
}
7个数的集合为{1, 2, 3, 4, 5, 6, 7},要求出第n=1654个排列
#include <iostream>
#include<algorithm>
using namespace std;
int main(int argc, char** argv) {
int a[7]={1,2,3,4,5,6,7};
sort(a,a+7);
int n=0;
do{
if(n==1654){
for(int i=0;i<7;i++)
cout<<a[i];
cout<<endl;
break;
}
n++;
}while(next_permutation(a,a+7));
return 0;
}
牛客防爆
#include<bits/stdc++.h>
using namespace std;
const int N=100010;
int w[N];
typedef long long LL;
int n;
signed main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
return 0;
}