真题

【进制转换】

方法二

#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 条评论

目前还没有评论...