- 月赛
- 2024-08-26 21:04:06 @
以下为核桃编程官方提供的代码,供参考
<center>
<h2>第一题</h2>
</center>
#include <bits/stdc++.h>
#define int long long
using namespace std;
int n; // 跑了多少米
int x; // 跑了多少完整的圈
int m; // 不完整的圈的长度
signed main()
{
scanf("%lld", &n);
x = n / 400;
m = n % 400;
printf("%lld\n", x);
if (m % 100 == 0) // 整百数或0,说明在直道与弯道的交界处,不输出
{
return 0;
}
if ((0 < m && m < 100) || (200 < m && m < 300)) // 在弯道
{
puts("S");
}
else // 不在交界处、不在弯道、必定在直道
{
puts("L");
}
return 0;
}
<center>
<h2>第二题</h2>
</center>
#include <bits/stdc++.h>
#define int long long
using namespace std;
int n; // 脆弱木板数量
int ans = LLONG_MAX; // long long 的最大值
int id, times; // 同上文
signed main()
{
scanf("%lld", &n);
for (int i = 1; i <= n; ++i)
{
scanf("%lld %lld", &id, ×);
ans = min(ans, id + (times - 1) / 2);
}
printf("%lld\n", ans);
return 0;
}
<center>
<h2>第三题</h2>
</center>
#include <bits/stdc++.h>
using namespace std;
const int N = 30;
const int M = 1e5 + 5;
struct word
{
string s;
} d[M]; // 存储词典中的单词
bool v[N]; // 标记坏掉的键位
int n; // 坏掉的键位的数量
int m; // 文章中单词的数量
int cnt; // 词典中单词的数量
int slen; // 单词的长度
char c; // 读入坏掉的键位
string s; // 读入文章中的单词
void add() // 尝试将s加入词典中
{
bool f = 0; // 标记s是否存在于词典中
for (int i = 1; i <= cnt; ++i)
{
if (d[i].s == s)
{
f = 1;
break;
}
}
if (!f)
d[++cnt].s = s; // s当前不存在于词典中,则加入s
return;
}
int main()
{
cin >> n; // 读入坏掉的按键
for (int i = 1; i <= n; ++i)
{
cin >> c;
v[c - 'a'] = 1;
}
cin >> m; // 读入文章中的单词,在读入过程中处理答案
for (int i = 1; i <= m; ++i)
{
cin >> s;
slen = s.size();
for (int j = 0; j < slen; ++j)
{
if (v[s[j] - 'a'])
{
add();
break; // 单词中的任意一个字母不能打出,该单词则不能打出,直接跳出循环即可
}
}
}
printf("%d\n", cnt);
return 0;
}
<center>
<h2>第四题</h2>
</center>
#include <bits/stdc++.h>
using namespace std;
struct pai
{
// cnt:0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
// pai: 0 0 3 4 5 6 7 8 9 10 J Q K A 2
int cnt[20];
int num; // 牌的总数
bool check(int ne) // 检查是否有能出的牌
{
for (int i = 3; i <= 15; ++i)
if (i > ne && cnt[i])
return 1;
return 0;
}
void chu(int id, int &ne) // 出牌
{
for (int i = 3; i <= 15; ++i)
{
if (i > ne && cnt[i]) // 出的牌必须比前一张大
{
ne = i;
// 加上取地址符'&'后,在函数中修改一个数值,主函数中的值也会改变
--cnt[i];
--num;
printf("%d use: %d\n", id, i > 13 ? i - 13 : i);
// 三目运算符保证A 2 正常输出
return;
}
}
return;
}
} p[4]; // 3个人
signed main()
{
for (int i = 1; i <= 3; ++i)
{
int x;
scanf("%d", &x);
for (; x;)
{
if (x < 3)
x += 13; // 将 A 、2 加13,方便处理
++p[i].num;
++p[i].cnt[x];
scanf("%d", &x);
}
}
int now = 1; // 现在谁出牌
int ne = 0; // 上一张牌的大小0为轮空
int n_id = 1; // 上一个出牌的人
while (p[1].num && p[2].num && p[3].num) // 有人牌数为0,结束
{
if (!ne)
{
// 一次出牌,需要更新:上一位出牌人、上一张牌的大小、下一位出牌人
p[now].chu(now, ne);
n_id = now;
now %= 3;
++now;
}
else
{
while (!p[now].check(ne)) // 看看谁要得起
{
now %= 3;
++now;
if (now == n_id)
break; // 剩余2人都要不起
}
if (now != n_id) // 没轮空
{ // 出牌的同时不要忘记更新
p[now].chu(now, ne);
n_id = now;
now %= 3;
++now;
}
else
ne = 0; // 轮空了
}
} // 结束后,谁的牌为0,谁获胜
if (!p[1].num)
puts("winer: 1");
else if (!p[2].num)
puts("winer: 2");
else
puts("winer: 3");
return 0;
}
```以下为核桃编程官方提供的代码,供参考
<center>
<h2>第一题</h2>
</center>
```cpp
#include <bits/stdc++.h>
#define int long long
using namespace std;
int n; // 跑了多少米
int x; // 跑了多少完整的圈
int m; // 不完整的圈的长度
signed main()
{
scanf("%lld", &n);
x = n / 400;
m = n % 400;
printf("%lld\n", x);
if (m % 100 == 0) // 整百数或0,说明在直道与弯道的交界处,不输出
{
return 0;
}
if ((0 < m && m < 100) || (200 < m && m < 300)) // 在弯道
{
puts("S");
}
else // 不在交界处、不在弯道、必定在直道
{
puts("L");
}
return 0;
}
<center>
<h2>第二题</h2>
</center>
#include <bits/stdc++.h>
#define int long long
using namespace std;
int n; // 脆弱木板数量
int ans = LLONG_MAX; // long long 的最大值
int id, times; // 同上文
signed main()
{
scanf("%lld", &n);
for (int i = 1; i <= n; ++i)
{
scanf("%lld %lld", &id, ×);
ans = min(ans, id + (times - 1) / 2);
}
printf("%lld\n", ans);
return 0;
}
<center>
<h2>第三题</h2>
</center>
#include <bits/stdc++.h>
using namespace std;
const int N = 30;
const int M = 1e5 + 5;
struct word
{
string s;
} d[M]; // 存储词典中的单词
bool v[N]; // 标记坏掉的键位
int n; // 坏掉的键位的数量
int m; // 文章中单词的数量
int cnt; // 词典中单词的数量
int slen; // 单词的长度
char c; // 读入坏掉的键位
string s; // 读入文章中的单词
void add() // 尝试将s加入词典中
{
bool f = 0; // 标记s是否存在于词典中
for (int i = 1; i <= cnt; ++i)
{
if (d[i].s == s)
{
f = 1;
break;
}
}
if (!f)
d[++cnt].s = s; // s当前不存在于词典中,则加入s
return;
}
int main()
{
cin >> n; // 读入坏掉的按键
for (int i = 1; i <= n; ++i)
{
cin >> c;
v[c - 'a'] = 1;
}
cin >> m; // 读入文章中的单词,在读入过程中处理答案
for (int i = 1; i <= m; ++i)
{
cin >> s;
slen = s.size();
for (int j = 0; j < slen; ++j)
{
if (v[s[j] - 'a'])
{
add();
break; // 单词中的任意一个字母不能打出,该单词则不能打出,直接跳出循环即可
}
}
}
printf("%d\n", cnt);
return 0;
}
<center>
<h2>第四题</h2>
</center>
#include <bits/stdc++.h>
using namespace std;
struct pai
{
// cnt:0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
// pai: 0 0 3 4 5 6 7 8 9 10 J Q K A 2
int cnt[20];
int num; // 牌的总数
bool check(int ne) // 检查是否有能出的牌
{
for (int i = 3; i <= 15; ++i)
if (i > ne && cnt[i])
return 1;
return 0;
}
void chu(int id, int &ne) // 出牌
{
for (int i = 3; i <= 15; ++i)
{
if (i > ne && cnt[i]) // 出的牌必须比前一张大
{
ne = i;
// 加上取地址符'&'后,在函数中修改一个数值,主函数中的值也会改变
--cnt[i];
--num;
printf("%d use: %d\n", id, i > 13 ? i - 13 : i);
// 三目运算符保证A 2 正常输出
return;
}
}
return;
}
} p[4]; // 3个人
signed main()
{
for (int i = 1; i <= 3; ++i)
{
int x;
scanf("%d", &x);
for (; x;)
{
if (x < 3)
x += 13; // 将 A 、2 加13,方便处理
++p[i].num;
++p[i].cnt[x];
scanf("%d", &x);
}
}
int now = 1; // 现在谁出牌
int ne = 0; // 上一张牌的大小0为轮空
int n_id = 1; // 上一个出牌的人
while (p[1].num && p[2].num && p[3].num) // 有人牌数为0,结束
{
if (!ne)
{
// 一次出牌,需要更新:上一位出牌人、上一张牌的大小、下一位出牌人
p[now].chu(now, ne);
n_id = now;
now %= 3;
++now;
}
else
{
while (!p[now].check(ne)) // 看看谁要得起
{
now %= 3;
++now;
if (now == n_id)
break; // 剩余2人都要不起
}
if (now != n_id) // 没轮空
{ // 出牌的同时不要忘记更新
p[now].chu(now, ne);
n_id = now;
now %= 3;
++now;
}
else
ne = 0; // 轮空了
}
} // 结束后,谁的牌为0,谁获胜
if (!p[1].num)
puts("winer: 1");
else if (!p[2].num)
puts("winer: 2");
else
puts("winer: 3");
return 0;
}
0 条评论
目前还没有评论...