U37406.2024年 - 年赛 - 题解

通过率:0%

时间限制:1.00s

内存限制:128MB

题目描述

编者:I love c++☺
注:题解中的 freopenfreopen 为制作测试点时所用,正常答题时不用。

T1 - 签到题 原题链接

#include <bits/stdc++.h>
using namespace std;

int main() {
    
    //freopen("qd000.in", "r", stdin);
	//freopen("qd000.out", "w", stdout);
	 
    cout << "Byebye 2024!";
    
    //fclose(stdin);
    //fclose(stdout);
    
    return 0;
}

T2 - 阿克曼(Ackermann)函数 原题链接

#include <bits/stdc++.h>
using namespace std;

int m, n;

int akm(int m, int n) {
	if (m == 0) return n + 1;
	else if (m > 0 && n == 0) return akm(m - 1, 1);
	else return akm(m - 1, akm(m, n - 1));
}

int main() {
    
    //freopen("akm000.in", "r", stdin);
	//freopen("akm000.out", "w", stdout);
	 
    cin >> m >> n;
    cout << akm(m, n);
    
    //fclose(stdin);
    //fclose(stdout);
    
    return 0;
}

T3 - 找第一个只出现一次的字符 原题链接

#include <bits/stdc++.h>
using namespace std;

string s;
int a[30];

int main() {
	
	//freopen("letter000.in", "r", stdin);
	//freopen("letter000.out", "w", stdout);
	 
	cin >> s;
	for (int i = 0; i < s.size(); i ++) {
		a[s[i] - 'a'] ++;
	}
	for (int i = 0; i < s.size(); i ++) {
		if (a[s[i] - 'a'] == 1) {
			cout << s[i];
        	return 0;
        }
	}
	cout << "no";

	//fclose(stdin); 
	//fclose(stdout);
	
	return 0;
} 

T4 - 计算阶乘 原题链接

#include <bits/stdc++.h>
using namespace std;

long long t, n;

int main() {
	
	//freopen("jie000.in", "r", stdin);
	//freopen("jie000.out", "w", stdout);
	
	cin >> t;
	while (t--) {
		unsigned long long ans = 2;
		cin >> n;
		for (int i = n - 1; i > 0; i -= 2) {
			ans *= i;
		}
		cout << ans << endl;
	}
	
	//fclose(stdin);
	//fclose(stdout);
	
	return 0;
}

T5 - 点亮灯笼 原题链接

#include <bits/stdc++.h> 
using namespace std;

int n, m;
int a[1010];
 
int main() {
	
//	freopen("dian000.in", "r", stdin);
//	freopen("dian000.out", "w", stdout);

	cin >> n >> m;
	while(m--) {
		int x; 
		scanf("%d", &x);
		if(x == 1) a[1] = 1 - a[1], a[2] = 1 - a[2], a[n] = 1 - a[n];
		else if(x == n) a[n] = 1 - a[n], a[n - 1] = 1 - a[n - 1], a[1] = 1 - a[1];
		else a[x] = 1 - a[x], a[x + 1] = 1 - a[x + 1], a[x - 1] = 1 - a[x - 1];
	}
	for (int i = 1; i <= n; i ++) {
		cout << a[i] << " ";
	}
	
//	fclose(stdin);
//	fclose(stdout);

	return 0; 
}

T6 - 最大公约数和最小公倍数问题 原题链接

#include <bits/stdc++.h>
using namespace std;

typedef long long ll;
int m, n, ans, flag;
ll gcd(ll x, ll y) {
    if (y == 0) {return x;}
    return gcd(y, x % y);
}

int main() {
	
//	freopen("daxiao000.in", "r", stdin);
//	freopen("daxiao000.out", "w", stdout); 
    
	cin >> n >> m;
    for (int i = 1; i <= sqrt(1ll * m * n); i ++) {
        if ((1ll * n * m) % i == 0 && gcd(i, (1ll * n * m) / i) == n) {
            ans ++;
            if (1ll * i * i == 1ll * n * m)  flag = 1;
        }
    }
    cout << ans * 2 - flag;
    
//    fclose(stdin);
//    fclose(stdout);
    
    return 0;
}

T7 - faebdc玩扑克 原题链接

#include <bits/stdc++.h>
using namespace std;

queue<int> a;
int sc[1000005], ans[1000005];
int n;

int main() {
	
//	freopen("faebdc000.in", "r", stdin);
//	freopen("faebdc000.out", "w", stdout);
	
    cin >> n;
    for (int i = 1; i <= n; i ++) a.push(i);
	for (int i = 1; !a.empty(); i ++) {
        a.push(a.front());
        a.pop();
        sc[i] = a.front();
        a.pop();
    }
    for (int i = 1; i <= n; i ++) ans[sc[i]] = i;
    for (int i = 1; i <= n; i ++) cout << ans[i] << " ";
    
//    fclose(stdin);
//    fclose(stdout);
    
    return 0;
}

T8 - 素数个数 原题链接

#include <bits/stdc++.h>
using namespace std;

int N, sum, n;
bool a[100000000];

int main() {
	
	//freopen("su000.in", "r", stdin);
	//freopen("su000.out", "w", stdout);
	
    cin >> N;
	if (N < 2) {
		cout << "0";
		return 0;
	}
	sum = N;
	sum -= N / 2 - 1;
	a[1] = true;
	for (register int i = 3; i <= sqrt(N); i += 2) {
    	if (a[i]==false) {
    		for (register int j = i * 2; j <= N; j += i) {
    			if (a[j] == false && j % 2 != 0) {
    				sum --;
    			}
    			a[j] = true;
    		}
		}
	}
	cout << sum - 1;
	
	//fclose(stdin);
	//fclose(stdout);
	
	return 0;
}

T9 - 偶数 原题链接

#include <bits/stdc++.h>
using namespace std;

long long n, i, f[200], j, t, s;
long long p = 1000003, l, k, pp;
long long aa(long long n) {
    long long i = 2LL, j = 1LL, q;
    if (n <= 2) return 0;
    while (i * 2 <= n) {i = i * 2; j ++;}
    return (2 * aa(n - i) % p + f[j + 1] - 2 * f[j] % p - ((i * 2 - n) % p) * ((i * 2 - n - 1) % p) * l + p * p * p) % p;
}

int main() {
	
	//freopen("ou000.in", "r", stdin);
	//freopen("ou000.out", "w", stdout);
	
    cin >> n;
	f[1] = 0;
	i = 2;
	j = 1;
    k = 2;
	l = 1;
	pp = p - 2;
    while (pp > 0) {
          if (pp % 2 == 1) l = l * k % p;
          k = k * k % p;
		  pp = pp / 2;
    }   
    while (i <= n) {
          j ++;
		  s = i % p;
		  t = s * (s - 1) % p;
          f[j] = ((f[j - 1] * 3 % p) + ((i % p) * ((i - 1) % p) % p) * l) % p;
          i = i * 2;
    }
    cout << aa(n);
    //system("pause");
    
    //fclose(stdin);
    //fclose(stdout);
    
    return 0;
}

T10 - 算24点 原题链接

#include <bits/stdc++.h>
using namespace std;

int a[5];
char opt[5]= {' ', '+', '-', '*', '/'};

int F(int x,int k, int y) {
  if (k == 1)
    return x + y;
  if (k == 2)
    return max(x, y) - min(x, y);
  if (k == 3)
    return x * y;
  return (y == 0 || x < y || x % y != 0) ? -999999 : x / y;
}

void Out(int a, int b, int c, int d, int e, int f, int k1, int k2, int k3) {
  printf("%d%c%d=%d\n", max(a, b), opt[k1], min(a, b), F(max(a, b), k1, min(a, b)));
  printf("%d%c%d=%d\n", max(c, d), opt[k2], min(c, d), F(max(c, d), k2, min(c, d)));
  printf("%d%c%d=%d\n", max(e, f), opt[k3], min(e, f), F(max(e, f), k3, min(e, f)));
  exit(0);                                                  //直接退出程序
}

int main() {
	
	//freopen("suan000.in", "r", stdin);
	//freopen("suan000.out", "w", stdout);
	
	scanf("%d%d%d%d", &a[1], &a[2], &a[3], &a[4]);
	sort(a + 1, a + 5);                                            //保证遍历所有情况
	do {
	  for (int i = 1; i <= 4; i ++)                            //暴力枚举3个运算符
	    for (int j = 1; j <= 4; j ++)
	      for (int k = 1; k <= 4; k ++)
	        if (F(F(F(a[1], i, a[2]), j, a[3]), k, a[4]) == 24)       //((a?b)?c)?d
	          Out(a[1], a[2], F(a[1], i, a[2]), a[3], F(F(a[1], i, a[2]), j, a[3]), a[4], i, j, k);
	        else if (F(F(a[1], i, a[2]), k, F(a[3], j, a[4])) == 24)//(a?b)?(c?d)
	          Out(a[1], a[2], a[3], a[4], F(a[1], i, a[2]), F(a[3], j, a[4]), i, j, k);
	}  while (next_permutation(a + 1, a + 5));
	puts("No answer!");
	 
	//fclose(stdin);
	//fclose(stdout);
	
	return 0;
}
首页