A,SwapSort
#include<cstdio>
#include<cstring>
#include<cmath>
#include<climits>
#include<cctype>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#include<queue>
#include<vector>
#include<map>
#include<set>
#include<string>
#include<stack>
#define ll long long
#define eps 1e-8
#define MAX 3010
#define INF INT_MAX
using namespace std;
struct Node{
int x ,y;
}p[MAX];
int a[MAX],b[MAX];
int main(){
int n;
while (scanf("%d",&n) != EOF){
for (int i = 0; i<n; i++) {
scanf("%d",&a[i]);
b[i] = a[i];
}
sort(b,b+n);
int cnt = 0;
for (int i = 0; i<n; i++){
if (a[i] != b[i]){
for (int j = i+1; j<n; j++) if (a[j] == b[i]){
swap(a[i],a[j]);
p[cnt++] = (Node){i,j};
break;
}
}
}
printf("%d\n",cnt);
for (int i = 0; i<cnt; i++){
printf("%d %d\n",p[i].x,p[i].y);
}
}
return 0;
}
B,BerSU Ball
#include<cstdio>
#include<cstring>
#include<cmath>
#include<climits>
#include<cctype>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#include<queue>
#include<vector>
#include<map>
#include<set>
#include<string>
#include<stack>
#define ll long long
#define eps 1e-8
#define MAX 1000
#define INF INT_MAX
using namespace std;
vector<int>G[MAX];
int Left[MAX],n,m;
bool T[MAX];
bool match(int u){
for (int i = 0 ; i<G[u].size(); i++) if (!T[G[u][i]]){
int v = G[u][i];
T[v] = true;
if (!Left[v] || match(Left[v])){
Left[v] = u;
return true;
}
}
return false;
}
int KM(){
int cnt = 0;
memset(Left,0,sizeof(Left));
for (int i = 1; i<=n; i++){
memset(T,0,sizeof(T));
if (match(i)) cnt++;
}
return cnt;
}
int a[MAX],b[MAX];
int main(){
while (scanf("%d",&n) != EOF){
for (int i = 1; i<=n; i++) scanf("%d",&a[i]);
scanf("%d",&m);
for (int i = 1; i<=m; i++) scanf("%d",&b[i]);
for (int i = 0; i<MAX; i++) G[i].clear();
for (int i = 1; i<=n; i++)
for (int j = 1; j<=m; j++)
if (abs(a[i]-b[j]) <= 1) G[i].push_back(j+n);
printf("%d\n",KM());
}
}
C, Given Length and Sum of Digits..
#include<cstdio>
#include<cstring>
#include<cmath>
#include<climits>
#include<cctype>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#include<queue>
#include<vector>
#include<map>
#include<set>
#include<string>
#include<stack>
#define ll long long
#define eps 1e-8
#define MAX 1000
#define INF INT_MAX
using namespace std;
int a[MAX];
int b[MAX];
int main(){
int m,s;
while (scanf("%d%d",&m,&s) != EOF){
if (m == 1 && s <= 9){
printf("%d %d",s,s);
continue;
}
if (m == 1 && s > 9){
printf("-1 -1\n");
continue;
}
if (s == 0 || 9*m < s){
printf("-1 -1\n");
continue;
}
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
int t = s,c;
for (c = 1; t >= 9; c++){
a[c] = 9;
t -= 9;
}
if (t > 0) a[c] = t;
t = s;
int u = t % 9;
int v = t / 9;
if (v == m){
for (int i = 1; i<=m; i++) b[i] = 9;
}
else if (v == m-1){
if (u == 0){
b[1] = 1;
b[2] = 8;
for (int i = 3; i<=m; i++) b[i] = 9;
}
else{
b[1] = u;
for (int i = 2; i<=m; i++) b[i] = 9;
}
}
else{
b[1] = 1;
t -= 1;
for (c = m; t >= 9; c--){
b[c] = 9;
t -= 9;
}
if (t > 0) b[c] = t;
}
for (int i = 1; i<=m; i++) printf("%d",b[i]);
printf(" ");
for (int i = 1; i<=m; i++) printf("%d",a[i]);
printf("\n");
}
return 0;
}