- 题解
GESP 四级参考
- @ 2025-9-26 20:03:07
【进制转换】
方法二
#include <bits/stdc++.h>
using namespace std;
void zhuan(int n,string num){
long long len = num.length();
long long sum=0;
long long cnt=len-1;
for(int i=0;i<len;i++){
int x;
if(num[i] >= 'A' && num[i] <= 'Z'){
x = num[i] - 'A' + 10;
}
else{
x = num[i] - '0';
}
sum += x * pow(n,cnt);
cnt--;
}
cout << sum << endl;
}
int main(){
int n;
cin >> n;
while(n--){
long long k;
string num;
cin >> k >> num;
zhuan(k,num);
}
return 0;
}
【变长编码】
方法一:
```c
#include <iostream>
using namespace std;
string hex_chars = "0123456789ABCDEF";
void print_hex(int byte) {
cout << hex_chars[byte / 16] << hex_chars[byte % 16] << " ";
}
int main() {
long long n;
cin >> n;
if (n == 0) {
cout << "00" << endl;
return 0;
}
while (n > 0) {
int current = n % 128;
n /= 128;
if (n > 0) {
current += 128; // 非最后一组,最高位置1
}
print_hex(current);
}
return 0;
}
【变长编码】
#include<bits/stdc++.h>
using namespace std;
long long s[101],n,id;
int main(){
cin>>n;
if(n==0){
cout<<"00";
return 0;
}
while(n!=0){
s[++id]=n%2;
n=n/2;
}
int zu=id/7;
if(id % 7!=0) zu++;
int num=0;
int i=1;
while(i<=id){
string ss;
for(int j=1;j<=7;j++){
ss+=s[i]+'0';
i++;
}
num++;
if(num==zu) ss+='0';
else ss+='1';
int x=(ss[4]-'0')*1+(ss[5]-'0')*2+(ss[6]-'0')*4+(ss[7]-'0')*8;
int y=(ss[0]-'0')*1+(ss[1]-'0')*2+(ss[2]-'0')*4+(ss[3]-'0')*8;
if(x>9) cout<<char(x+55);
else cout<<x;
if(y>9) cout<<char(y+55)<<" ";
else cout<<y<<" ";
}
return 0;
}
小杨的字典
#include <bits/stdc++.h>
using namespace std;
int main() {
map<string, string> m;
int n;
cin >> n;
for (int i = 1; i <= n; i++) {
string a, b;
cin >> a >> b;
m[a] = b;
}
string s;
cin >> s;
s += '.';
string t = "";
string ans;
for (int i = 0; i < s.length(); i++) {
if (s[i] >= 'a' && s[i] <= 'z')
t += s[i];
else {
if (m.count(t)) {
ans += m[t];
t = "";
} else if (t != "") {
// cout<<t<<endl;
ans += "UNK";
t = "";
}
ans += s[i];
}
}
// cout << ans;
for (int i = 0; i < ans.length() - 1; i++) cout << ans[i];
}
相似字符串【GESP四级.2024.3】
#include<bits/stdc++.h>
using namespace std;
map<string, string> m;
int n = 0;
string s;
int main(){
cin >> n;
while(n--){
string a, b;
cin >> a >> b;
m[a] = b;
}
cin >> s;
string t = "";
for(int i=0; s[i]; i++){
if(s[i] >= 'a' && s[i] <= 'z') t += s[i];
else{
if(m.count(t)) cout << m[t];
else if(t != "") cout << "UNK";
t = "";
cout << s[i];
}
}
if(m.count(t)) cout << m[t];
else if(t != "") cout << "UNK";
return 0;
}
做题【GESP四级.2024.3】
#include<bits/stdc++.h>
using namespace std;
long long n, a[1000005], ans=1;
int main(){
cin >> n;
for(int i=1; i<=n; i++)cin >> a[i];
sort(a+1, a+n+1);
for(int i=1; i<=n; i++){
if(a[i] >= ans) ans++;
}
cout << ans - 1;
return 0;
}
[GESP202312 四级] 田忌赛马
#include<bits/stdc++.h>
using namespace std;
long long n,a[100005],b[100005];
int main(){
cin>>n;
long long sum=0;
for(int i=1;i<=n;i++) cin>>a[i];
for(int i=1;i<=n;i++) cin>>b[i];
sort(a+1,a+n+1);
sort(b+1,b+n+1);
int j=1;
for(int i=1;i<=n;i++){
if(a[i]>b[j]){
sum++;
j++;
}
}
cout<<sum;
return 0;
}
黑白方块【GESP四级.2024.6】
#include<bits/stdc++.h>
using namespace std;
int n, m, ans;
char a[15][15];
int main(){
cin >> n >> m;
for(int i=1; i<=n; i++){
for(int j=1; j<=m; j++) cin >> a[i][j];
}
for(int i=1; i<=n; i++){
for(int j=1; j<=m; j++){
for(int l=i; l<=n; l++){
for(int k=j; k<=m; k++){
int c0 = 0, c1 = 0;
for(int x = i; x <= l; x++){
for(int y = j; y <= k; y++){
if(a[x][y] == '0') c0++;
else c1++;
}
}
if(c0 == c1) ans = max(ans, 2 * c0);
}
}
}
}
cout << ans;
return 0;
}
宝箱【GESP四级-2024.6】
#include<bits/stdc++.h>
using namespace std;
long long n, k, a[1007], ans;
int main(){
cin >> n >> k;
for(int i=1; i<=n; i++) cin >> a[i];
sort(a+1, a+1+n);
for(int j=1; j<=n; j++){
long long sum = 0;
for(int i=j; i>=1; i--){
if(a[j] - a[i] <= k) sum += a[i];
else break;
}
ans = max(ans, sum);
}
cout << ans;
return 0;
}
幸运数
#include<bits/stdc++.h>
using namespace std;
int b[20] = {0,7,5,3,1,8,6,4,2,9};
int wei(long long a){
int sum=0;
while(a>0){
sum++;
a/=10;
}
return sum;
}
int main(){
int n;
cin >> n ;
for(int i=1;i<=n;i++){
long long a,sum=0;
cin >> a;
int l = wei(a);
for(int j=1;j<=l;j++){
if(j%2==0){
sum+=a%10;
}
else {
sum+=b[a%10];
}
a/=10;
}
if(sum%8==0){
cout << "T\n";
}
else{
cout << "F\n";
}
}
return 0;
}
Recaman[2024.12四级真题
#include <cstdio>
#include <algorithm>
using namespace std;
const int N = 2e5 + 5;
const int C = 1e6 + 5;
int n;
int a[N];
int vis[C];
void bubble_sort(int *a, int n) {
bool flag = true;
while (flag) {
flag = false;
for (int i = 1; i < n; ++i) {
if (a[i] > a[i + 1]) {
flag = true;
int t = a[i];
a[i] = a[i + 1];
a[i + 1] = t;
}
}
}
}
int main() {
scanf("%d", &n);
a[1] = 1;
vis[1] = 1;
for (int i = 2; i <= n; i++) {
if (a[i - 1] - i <= 0 || vis[a[i - 1] - i])
a[i] = a[i - 1] + i;
else
a[i] = a[i - 1] - i;
vis[a[i]] = 1;
}
bubble_sort(a, n);
for (int i = 1; i <= n; i++)
printf("%d%c", a[i], " \n"[i == n]);
return 0;
}
区间H排序【GESP四级-2024.09】
#include <bits/stdc++.h>
using namespace std;
int arr[107];
int main() {
int n;
cin >> n;
for (int i = 1; i <= n; i++) cin >> arr[i];
int times;
cin >> times;
while (times--) {
int l, r;
cin >> l >> r;
sort(arr + l, arr + r + 1);
}
for (int i = 1; i <= n; i++) {
cout << arr[i] << ' ';
}
return 0;
}
字符排序2024.12四级]
#include <bits/stdc++.h>
using namespace std;
string arr[107];
int main() {
int n;
cin >> n;
while (n--) {
int ti;
cin >> ti;
for (int i = 0; i < ti; i++) cin >> arr[i];
sort(arr, arr + ti);
string ss = "";
for (int i = 0; i < ti; i++) ss += arr[i];
int leng = ss.size(), f = 1;
for (int i = 0; i < leng - 1; i++) {
if (ss[i] > ss[i + 1]) {
f = 0;
break;
}
}
cout << f << endl;
}
return 0;
}
图像压缩【GESP四级-2023.06】
#include <bits/stdc++.h>
#include <cstring>
using namespace std;
int a[25][25];//保存输入数据
struct Node{//不同灰度的数量
int hd;//灰度
int sl;//数量
}c[300];
//十六进制转10进制
int toint(char c){
if (c>='A'&&c<='F'){
return c-'A'+10;
}
return c-'0';
}
//将10进制打印为16进制
void printHx(int x){
char c;
if (x>9){
c='A'+x-10;
}else{
c=x+'0';
}
cout<<c;
}
//按出现的数量从大到小排序,数量相同,灰度小的排前边
bool cmp(Node x,Node y){
if (x.sl==y.sl) return x.hd<y.hd;
return x.sl>y.sl;
}
int main() {
int n;
cin>>n;
string s;
for (int i=1;i<=n;i++){
cin>>s;
int t;
//16进制转换为10进制保存到数组中
for (int j = 0; j < s.size(); j += 2) {
t = toint(s[j]) * 16 + toint(s[j + 1]);
a[i][j / 2 + 1] = t;
c[t].sl++; //标记灰度值为t出现的次数
}
}
for (int i=1;i<=255;i++){//初始化灰度值
c[i].hd=i;
}
sort(c,c+256,cmp);//排序
for (int i=0;i<16;i++){//打印排名前16
printHx(c[i].hd/16);
printHx(c[i].hd%16);
}
cout<<endl;
int len=s.length()/2;
for (int i=1;i<=n;i++){//找到每个像素点的最近值
for (int j=1;j<=len;j++){
int minn=256;
int p=0;
for (int k=0;k<=15;k++){
if (abs(c[k].hd-a[i][j])<minn){
minn=abs(c[k].hd-a[i][j]);
p=k; //记录编号
}
}
printHx(p);//打印与其最近的灰度值编号的16进制
}
cout<<endl;
}
return 0;
}
荒地开垦【GESP四级-2025.3】
#include<bits/stdc++.h>
using namespace std;
int n, m;
char s[1005][1005];
int ans;
int xx[5] = {0, -1, 1, 0, 0};
int yy[5] = {0, 0, 0, -1, 1};
int num[1005][1005]; //num[i][j]表示i行j列四周及本身有多少块杂草!
int main(){
cin >> n >> m;
for(int i=1; i<=n; i++){
for(int j=1; j<=m; j++) cin >> s[i][j];
}
//先算出本身就已经是可以开垦的
for(int i=1; i<=n; i++){
for(int j=1; j<=m; j++){
int cnt = 0;
for(int k=0; k<5; k++){
int gox = i + xx[k];
int goy = j + yy[k];
if(s[gox][goy] == '#') cnt++;
}
if(cnt == 0) ans++;
num[i][j] = cnt;
}
}
int ans1 = 0;
for(int i=1; i<=n; i++){
for(int j=1; j<=m; j++){
if(s[i][j] == '#'){
int cnt = 0; //表示这块杂草去掉后能开垦的荒地数量
for(int k=0; k<5; k++){
int gox = i + xx[k];
int goy = j + yy[k];
if(num[gox][goy] == 1) cnt++;
}
ans1 = max(ans1, cnt);
}
}
}
cout << ans + ans1;
return 0;
}
二阶矩阵【GESP四级-2025.3】
#include<bits/stdc++.h>
using namespace std;
int n, m, cnt;
int a[505][505];
int main(){
cin >> n >> m;
for(int i=1; i<=n; i++){
for(int j=1; j<=m; j++){
cin >> a[i][j];
}
}
for(int i=1; i<n; i++){
for(int j=1; j<m; j++){
if(a[i][j] * a[i+1][j+1] == a[i+1][j] * a[i][j+1]) cnt++;
}
}
cout << cnt;
return 0;
}
画布裁剪【GESP四级2025.06】
#include <bits/stdc++.h>
#define DEBUG(var) cout << "[DEBUG]" << #var << " = " << var << endl
using namespace std;
int main() {
int h, w;
scanf("%d%d", &h, &w);
char arr[h + 7][w + 7];
int x1, y1, x2, y2;
scanf("%d%d%d%d", &x1, &x2, &y1, &y2);
for (int i = 0; i < h; i++) {
scanf(" %s", arr[i]);
}
for (int i = x1 - 1; i < x2; i++) {
arr[i][y2] = 0; // 确保字符串结尾
printf("%s\n", arr[i] + y1 - 1);
}
return 0;
}
排序【GESP四级-2025.06】
#include <bits/stdc++.h>
#define DEBUG(var) cout << "[DEBUG]" << #var << " = " << var << endl
using namespace std;
struct student {
int h, w;
};
int n, cnt = 0;
student arr[3007];
bool cmp(student a, student b) {
if (a.h != b.h) {
return a.h > b.h;
}
return a.w > b.w;
}
void bobb() {
for (int i = 1; i < n; i++) {
for (int j = 1; j <= n - i; j++) {
if(arr[j].h<arr[j+1].h){
cnt++;
swap(arr[j],arr[j+1]);
}
else if(arr[j].h==arr[j+1].h &&arr[j].w<arr[j+1].w){
cnt++;
swap(arr[j],arr[j+1]);
}
}
}
}
int main() {
cin >> n;
for (int i = 1; i <= n; i++) {
cin >> arr[i].h >> arr[i].w;
}
bobb();
cout << cnt;
return 0;
}
0 条评论
目前还没有评论...