敬请关注新生赛!SWPU-ACM官方群:815161393 !
作者 :2020级 Tekola. AND 2020级 Moon.
赛题依然开放,点击 SWPU Pre-teammate Contest ( 2021 ) 可进行答题。
灵感来自 Luogu P1000 超级玛丽游戏
Crtl + Shift + Alt
多行 Insert\
以连缀多行题意:将给定字符串中的 ‘4’ 改成 ‘6’, ‘7’ 改成 ‘8’,输出修改次数以及最终的字符串。
#include
char str[7 + 20000];
int main() {
int n, cnt = 0;
scanf("%d\n%[^\n]", &n, str + 1);
for (int i = 1; i <= n; ++i) {
cnt += str[i] == '4' || str[i] == '7';
str[i] = str[i] == '4' ? '6' : str[i] == '7' ? '8' : str[i];
}
printf("%d\n%s", cnt, str + 1);
return 0;
}
input()
s = input().strip()
print( s.count('4') + s.count('7') )
print( s.replace('4', '6').replace('7', '8') )
Orange
的战斗力小于任意一个敌人时就会输掉比赛。#include
int main () {
long long orange, enemy;
int flag = 1;
scanf("%lld", &orange);
for (int i = 0; flag && i < 7; ++i)
scanf("%lld", &enemy), flag = enemy < orange;
puts( flag ? "恭喜橘子云顶吃鸡" : "猪鼻吧,怎么这么菜啊");
return 0;
}
trick
的一点是输出 '%'
的时候放弃 printf("%%..")
而直接选用 puts("%..")
,这边就直接 ""%s"
好了。#include
int main() {
double a, b, c, d;
scanf("%lf%lf%lf%lf", &a, &b, &c, &d);
double n = a + b + c + d,
temp = (a + b) * (c + d) * (a + c) * (b + d),
ans = (n * ((a * d) - (b * c)) * ((a * d) - (b * c)) / temp);
printf("%.2f\n%s", ans, ans > 6.635 ? "99% sure" : "Not 99% sure");
return 0;
}
USACO training 原题
题意: 有一些人相互送了礼物,求最终的净收入
分析: 建立 结构体
,处理好输入即可,判断有没有送礼人、有没有送礼。之后需要两次循环分别计算支出和收入。
#include
#include
#define N 25
int n;
struct people {
int meoney;
char name[N];
} peop[N];
void change(char s[], int x) {
for (int i = 1; i <= n; i++) {
if (!strcmp(peop[i].name, s)) {
peop[i].meoney += x;
return;
}
}
}
int main() {
scanf("%d", &n);
for (int i = 1; i <= n; i++)
scanf("%s", peop[i].name);
char s[N];
int how, hw;
while (scanf("%s%d%d", s, &hw, &how) == 3) {
if (how == 0) continue;
int add = hw / how;
change(s, -(add * how));
for (int i = 1; i <= how; i++) {
scanf("%s", s);
change(s, add);
}
}
for (int i = 1; i <= n; i++)
printf("%s %d\n", peop[i].name, peop[i].meoney);
return 0;
}
#include
int main() {
int t, n;
scanf("%d", &t);
while ( t -- ) {
scanf("%d", &n);
printf("%d$%d\n", ( n + 2 ) / 3, n);
}
return 0;
}
#include
#include
int main() {
int t, n;
scanf("%d%d", &n, &t);
while ( t-- )
printf("%d\n", (int)sqrt(n));
return 0;
}
Luogu P3150 pb的游戏(1)
ios::sync_with_stdio(false), cin.tie(nullptr)
会被卡掉输入。其他语言的输入挂在此不做赘述。#include
int main() {
int t;
long long i;
scanf("%d", &t);
while (t--) {
scanf("%lld", &i);
puts( i & 1 ? "Moon,I'm coming" : "Sorry,Moon");
}
return 0;
}
要素比较多,包括「素数判定」,「分解约数」,「输出格式」和「降序排序」,实际上本题是为学习过四者的同学准备的。
学习过这四样之后,直接模拟即可,况且本身也是网络赛,现场学也来得及 (不是)。
为了敲得快一点,我直接使用的 C++ :
#include
using namespace std;
multiset<int> ans;
int t, cnt, it;
bool isP(int n) {
if (n <= 1) return false;
for (int i = 2; i <= sqrt(n); ++i)
if (n % i == 0) return false;
return true;
}
int main () {
while (cin >> it) {
t = it, cnt = 0;
for (int i = 2; i <= it; ++i) {
while ( t % i == 0) cnt ++, t /= i;
if (!t) break;
}
if (isP(cnt)) ans.insert(it);
}
cnt = 1;
if (!ans.size()) cout << '\n';
for (auto it = ans.rbegin(); it != ans.rend(); ++it) {
cout << *it << ",\n"[cnt++ == ans.size()];
}
cout << (isP(ans.size()) ? "Yes" : "No" ) << '\n';
return 0;
}
sort
不只是 C++ 才有:#include
#include
#include
int top, stk[10001];
int n, q, t, cnt;
int isP(int n) {
if (n <= 1) return 0;
for (int i = 2; i <= sqrt(n); ++i) if (n % i == 0) return 0;
return 1;
}
int cmp(const void * a, const void * b) {
return *(int *)b - *(int *)a;
}
int main() {
while (~scanf("%d", &n)) {
t = n, cnt = 0;
for (int i = 2; i <= n; ++i) {
while ( t % i == 0) cnt ++, t /= i;
if (!t) break;
}
if (isP(cnt)) stk[++ top] = n;
}
if ( !top ) puts("");
// 直接使用函数的名当做函数的参数,这个参数被称作函数指针
qsort(stk + 1, top, sizeof(int), cmp);
for (int i = 1; i <= top; ++i)
printf("%d%c", stk[i], ",\n"[top == i]);
puts( isP(top) ? "Yes" : "No");
return 0;
}
Q 3 Q_3 Q3即为所求。易证 Q 3 Q_3 Q3在O O 2 O_2 O2的中垂线上。当l在接近x轴的时候显然比远离x的最优,所以显然, C 1 C_1 C1的最底点即为题目所求。
但是这个只考虑了一种情况,还有一种情况,就是 C 1 C_1 C1与x轴有交点时,直接去 O 2 O_2 O2点显然更近。
其实还有一种 C 1 C_1 C1与 C 2 C_2 C2相交的情况,但是题目的数据规避了这个问题,这种情况可以忽略。这道题还有一个小小的点,就是因为Moon没有过4级(实际上是涛涛的锅)需要特判一下是第几只涛涛。下附代码:
#include
char* d[11]={
"th","st","nd","rd","th","th","th","th","th","th"};
int main() {
int T;
scanf("%d", &T);
for(int t=1;t<=T;t++) {
double a,b,c;
scanf("%lf%lf%lf", &a, &b, &c);
double ans=0;
if(b<=c)
ans=2*a-c;
else
ans=2*sqrt(a*a+(b-c)*(b-c))-c;
printf("The shortest path of the %d%s Tekola is %.2f.\n", t, d[t % 10], ans);
}
return 0;
}
本场比赛题目整体难度均衡,对新生极其友好。赛中有以为选手一血了 6 6 6 道题,并且最终有两位大一选手 AK !
也算是圆满了吧 ~