C - 金币(扣了一分)
#include <iostream>#include <cstdio>using namespace std;int k, sum = 0;int main(){cin >> k;if (k == 1) { cout << 1; return 0; }int t = 0, max = 0;for (int i = 1; i <= k; i++) {t += i;if (t > k) { max = i - 1; t -= i; break; }}for (int i = 1; i <= max; i++) {sum += i * i;}sum += (k - t) * (max + 1);cout << sum;return 0;}
F - 笨小猴(扣了一分)
#include <iostream>#include <cstdio>#include <string>#include <algorithm>#include <vector>#include <cmath>using namespace std;struct NODE {char ch;int num;}node[26];int cmp(struct NODE a, struct NODE b) {return a.num < b.num;}bool check(int n) {if (n == 1 || n == 0) return false;for (int i = 2; i < sqrt(n); i++) {if (n % i == 0) return false;}return true;}int main(){for (int i = 0; i < 26; i++) { //初始化结点node[i].ch = 'a' + i;node[i].num = 0;}string s;cin >> s;for (int i = 0; i < s.size(); i++) { //输入结点node[s[i] - 97].num++;}int maxn = 1, minn = 1;//char maxch, minch;for (int i = 0; i < 26; i++) { //处理结点if (node[i].num) {if (maxn < node[i].num) maxn = node[i].num;if (minn > node[i].num) minn = node[i].num;}}if (check(maxn - minn)) {cout << "Lucky Word" << endl << maxn - minn;}else {cout << "No Answer" << endl << 0;}return 0;}
- 优雅的改进版↓(虽然还是扣了一分,明明在洛谷是100%.jpg)
#include<cstdio>#include<cstring>#include<iostream>using namespace std;string s;const int prime[25] = { 2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97 };//打表int sum[26];int main() {int maxn = -999, minn = 999; //注意初始化max 和 min 的习惯cin >> s;for (int i = 0; i < s.size(); i++) {sum[s[i] - 'a']++;}for (int i = 0; i < 26; i++) {if (sum[i] > maxn) maxn = sum[i];if (sum[i] > 0 && sum[i] < minn) minn = sum[i];}for (int i = 0; i < 25; i++) { //遍历100以内的质数if (maxn - minn == prime[i]) {printf("Lucky Word\n%d", maxn - minn);return 0;}}printf("No Answer\n0");return 0;}
K- 生活大爆炸版石头剪刀布(模拟)(AC了但是出现了C6385warming)
```cppinclude
include
using namespace std;
int N, Na, Nb; int a[1010], b[1010]; int aa, bb; int battle[5][5] = { {0,0,1,1,0},{1,0,0,1,0},{0,1,0,0,1},{0,0,1,0,1},{1,1,0,0,0} }; //用二维表保存规则
int main() { cin >> N >> Na >> Nb; for (int i = 0; i < Na; i++) cin >> a[i]; for (int i = 0; i < Nb; i++) cin >> b[i];
for (int i = 0; i < N; i++){aa += battle[a[i % Na]][b[i % Nb]];bb += battle[b[i % Nb]][a[i % Na]];}cout << aa << " " << bb << endl;return 0;
}
<a name="VIhYd"></a>## G - 插火把(如何模拟得更简明)```cpp#include<iostream>#include<cstdio>#include<cstring>const int MAXN = 101;using namespace std;int n, m, k, x, y, o, p, ans = 0;bool a[MAXN][MAXN] = { 0 };int dx1[13] = { 2,0,-2,0,1,1,1,0,0,0,-1,-1,-1 }, //火把的13个范围dy1[13] = { 0,2,0,-2,0,1,-1,1,0,-1,0,1,-1 };int dx2[25] = { -2,-2,-2,-2,-2,-1,-1,-1,-1,-1,0,0,0,0,0,1,1,1,1,1,2,2,2,2,2 }, //萤石的25个范围dy2[25] = { -2,-1,0,1,2,-2,-1,0,1,2,-2,-1,0,1,2,-2,-1,0,1,2,-2,-1,0,1,2 };bool check(int x, int y) {if (x < 1 || x > 100 || y < 1 || y > 100) return false;return true;}int main(){cin >> n >> m >> k;for (int i = 1; i <= m; i++){cin >> x >> y;for (int j = 0; j < 13; j++)if(check(x + dx1[j], y + dy1[j])) a[x + dx1[j]][y + dy1[j]] = 1;}for (int i = 1; i <= k; i++){cin >> o >> p;for (int j = 0; j < 25; j++)if (check(o + dx2[j], p + dy2[j])) a[o + dx2[j]][p + dy2[j]] = 1;}for (int i = 1; i <= n; i++)for (int j = 1; j <= n; j++)if (a[i][j] == 0)ans++;cout << ans;return 0;}
