A - 猜拳游戏
题意 :你正在与长途玩石头剪刀布的猜拳游戏。请回忆石头剪刀布的游戏规则: 两个人同时伸出手,分别出示石头 (用 shitou 表示) 、剪刀(用jiandao 表示)或布(用 bu 表示)的手势。石头胜刀,剪刀胜布,布胜石头。如果两个人出示的手势相同,则是平局,需要重新进行游戏。在开始游戏之前,长途会告诉你他要出石头、剪刀还是布。然而实际上,长途是在欺骗你。他认为你会相信他的话,并且认为你一定会根据他说的话选择能战胜他的手势 (例如,他说他会出石头,他便认为你会出布) 。所以最终,长途不会按照他告诉你的手势出拳,而是选择自己所认为一定能战胜你的手势。现在你已经看透了他的小心思。请问,在知道他告诉你他要出什么手势的情况下,你应该出什么手势才能取胜?
思路:出一样的手势即可
AC代码
#include <bits/stdc++.h>
using namespace std;
const int N = 1000010, mod = 998244353;
typedef long long LL;
string s;
int main()
{
cin >> s;
if(s == "bu") cout << "bu";
if(s == "shitou") cout << "shitou";
if(s == "jiandao") cout << "jiandao";
return 0;
}
B - Kevin喜欢一
题意:
思路 :判断n什么时候小于等于2的几次方,然后输出幂的大小
AC代码
#include <iostream>
using namespace std;
int main()
{
int T;
cin >> T;
while (T --)
{
int n;
cin >> n;
int cnt = 1;
int ans = 0;
while (cnt < n)
{
cnt *= 2;
ans ++;
}
cout << ans << endl;
}
return 0;
}
C - A加B,A模B
题意:
思路:可以根据题目给出关的式子推出公式 即 a = m, b = n - m.推的过程中因为K >= 0,所以为了简便当K = 0的时候式子最简单,所以取0;然后因为a mod b = m 即 m mod (n - m) = m;因为m 必须 大于 n - m所以a < b的这种情况考虑进去;其他情况为 -1
AC代码
#include <iostream>
using namespace std;
const int N = 1000010, mod = 998244353, INF=0x3f3f3f3f;
typedef long long LL;
int main()
{
int T;
cin >> T;
while(T --)
{
LL n, m;
cin >> n >> m;
LL ans = n - m;
LL res = m;
if(ans <= 0)
{
cout<< "-1" << endl;
}
else if(m >= ans)
{
cout << "-1" << endl;
}
else cout << res << " " << ans << endl;
}
return 0;
}
D - MoonLight的运算问题
题意:
思路: 因为当 x或者ai取0或1时肯定会选择加法,那么当x大于1时就标记一下,然后x大于1并且ai也必须大于1时,这时候就取乘法就行了;
AC代码
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N = 200010 , INF = 0x3f3f3f3f , mod = 998244353;
LL a[N];
int T, n;
int main()
{
cin >> T;
while (T --)
{
cin >> n;
LL x = 0;
int flag = 0;
for(int i = 1; i <= n; i ++)
{
cin >> a[i];
if(a[i])
{
if(a[i] > 1 && flag)
{
x = x * a[i] % mod;
}
else
{
if(x + a[i] > 1)
{
flag = 1;
}
x = (x + a[i]) % mod;
}
}
}
cout << x << endl;
}
}