A
注意0 0 这种特殊情况
#include <cstdio>
#include <cstring>
#include <cmath>
#include <cstdlib>
#include <cctype>
#include <sstream>
#include <iostream>
#include <algorithm>
#include <queue>
#include <stack>
#include <map>
#include <set>
#include <vector>
#include <string>
#include <utility>
using namespace std;
typedef long long ll;
const int qq = 1e5 + 10;
int num[qq];
int n, m, k;
int main(){
cin >> n >> m;
if(n == 0 && m == 0){
printf("NO\n");
return 0;
}
if(m - n == 1 || m == n || n - m == 1) printf("YES\n");
else printf("NO\n");
return 0;
}
B
#include <cstdio>
#include <cstring>
#include <cmath>
#include <cstdlib>
#include <cctype>
#include <sstream>
#include <iostream>
#include <algorithm>
#include <queue>
#include <stack>
#include <map>
#include <set>
#include <vector>
#include <string>
#include <utility>
using namespace std;
typedef long long ll;
const int qq = 1e5 + 10;
int num[qq];
int vis[qq];
int res[qq];
int n, m, k;
int main(){
cin >> n >> m;
memset(vis, 0, sizeof(vis));
for(int i = 0; i < n; ++i) num[i] = i;
for(int i = 0; i < n; ++i){
int x; scanf("%d", &x);
vis[x] = 1;
}
for(int i = 0; i < n; ++i) scanf("%d", res + i);
if(n == 1){
printf("YES\n");
return 0;
}
for(int i = 0; i < m; ++i){
if(vis[i]){
int c = i;
int k = 1;
while(vis[(c + (res[k] - res[k - 1])) % m]){
c = c + (res[k] - res[k - 1]);
k++;
if(k == n) break;
}
if(k == n){
printf("YES\n");
return 0;
}
}
}
printf("NO\n");
return 0;
}
C
#include <cstdio>
#include <cstring>
#include <cmath>
#include <cstdlib>
#include <cctype>
#include <sstream>
#include <iostream>
#include <algorithm>
#include <queue>
#include <stack>
#include <map>
#include <set>
#include <vector>
#include <string>
#include <utility>
using namespace std;
typedef long long ll;
const int qq = 1e5 + 10;
const int MAXN = 1e9;
int num[qq];
int n, m, k;
vector <int> v[105];
struct Node{
string st;
int digit;
int ch;
int lett;
}node[105];
int check(char x){
if(x >= '1' && x <= '9') return 1;
if(x >= 'a' && x <= 'z') return 2;
return 3;
}
int main(){
cin >> n >> m;
for(int i = 0; i < n; ++i){
cin >> node[i].st;
}
for(int i = 0; i < n; ++i){
int j;
int p = check(node[i].st[0]);
if(p == 1) node[i].digit = 0;
else if(p == 2) node[i].lett = 0;
else if(p == 3) node[i].ch = 0;
if(p != 1){
int mindigit = MAXN;
int coun = 1;
for(j = 1; j < m; ++j, coun++)
if(check(node[i].st[j]) == 1) break;
if(j != m) mindigit = min(mindigit, coun);
coun = 1;
for(j = m - 1; j >= 1; --j, coun++)
if(check(node[i].st[j]) == 1) break;
if(j != 0) mindigit = min(mindigit, coun);
node[i].digit = mindigit;
}
if(p != 2){
int mindigit = MAXN;
int coun = 1;
for(j = 1; j < m; ++j, coun++)
if(check(node[i].st[j]) == 2) break;
if(j != m) mindigit = min(mindigit, coun);
coun = 1;
for(j = m - 1; j >= 1; --j, coun++)
if(check(node[i].st[j]) == 2) break;
if(j != 0) mindigit = min(mindigit, coun);
node[i].lett = mindigit;
}
if(p != 3){
int mindigit = MAXN;
int coun = 1;
for(j = 1; j < m; ++j, coun++)
if(check(node[i].st[j]) == 3) break;
if(j != m) mindigit = min(mindigit, coun);
coun = 1;
for(j = m - 1; j >= 1; --j, coun++)
if(check(node[i].st[j]) == 3) break;
if(j != 0) mindigit = min(mindigit, coun);
node[i].ch = mindigit;
}
v[i].push_back(node[i].digit);
v[i].push_back(node[i].lett);
v[i].push_back(node[i].ch);
}
int minx = MAXN;
for(int l, j, i = 0; i < n; ++i)
for(j = i + 1; j < n; ++j)
for(l = j + 1; l < n; ++l)
minx = min(minx, min(v[i][0] + v[j][1] + v[l][2], v[i][0] + v[j][2] + v[l][1]));
for(int l, j, i = 0; i < n; ++i)
for(j = i + 1; j < n; ++j)
for(l = j + 1; l < n; ++l)
minx = min(minx, min(v[i][1] + v[j][0] + v[l][2], v[i][1] + v[j][2] + v[l][0]));
for(int l, j, i = 0; i < n; ++i)
for(j = i + 1; j < n; ++j)
for(l = j + 1; l < n; ++l)
minx = min(minx, min(v[i][2] + v[j][1] + v[l][0], v[i][2] + v[j][0] + v[l][1]));
printf("%d\n", minx);
return 0;
}