Taka 在时刻 打开了计算机,然后按了 次鼠标左键,第 次是在时刻 按下的。
如果两次敲击的时间 满足 ,那么我们就认为在 时间完成了一次双击。
什么时候完成了第一次双击?如果从没有过,就输出 -1
。
#include <bits/stdc++.h>
using namespace std;
int n, d;
int t[105];
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cin >> n >> d;
for (int i = 1; i <= n; i++)
cin >> t[i];
for (int i = 2; i <= n; i++)
{
if (t[i] - t[i - 1] <= d)
{
cout << t[i] << "\n";
return 0;
}
}
cout << "-1\n";
return 0;
}
给定一个长度为 的字符串,刚好包含 K
与 Q
各一个,R
、B
与 N
各两个。判断 是否满足下面的条件:
B
,。那么 与 有不同的奇偶性。(日本出题人描述不同奇偶性是这么描述的:have different parities
)K
必须在两个 R
之间。#include <bits/stdc++.h>
using namespace std;
string s;
int bPosX, bPosY, rPosX, rPosY, kPos;
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
bPosX = bPosY = rPosX = rPosY = kPos = 0;
cin >> s;
for (int i = 0; i < s.length(); i++)
{
if (s[i] == 'B')
{
if (bPosX)
bPosY = i + 1;
else
bPosX = i + 1;
}
if (s[i] == 'R')
{
if (rPosX)
rPosY = i + 1;
else
rPosX = i + 1;
}
if (s[i] == 'K')
kPos = i + 1;
}
if (bPosX % 2 != bPosY % 2 &&
rPosX < kPos && kPos < rPosY)
cout << "Yes\n";
else
cout << "No\n";
return 0;
}
给定一个 行 列的二维字符画。只包含字符 .
与 T
。
Taka 可以进行下面的步骤任意次(可能零次):
T
,就可以把 位置 改为 P
,位置 改为 C
。他会尽可能多得做这个步骤,找到一个最多操作次数时可能的最终局面
每一行贪心从前往后或者从后往前紧凑着改就好。
#include <bits/stdc++.h>
using namespace std;
int H, W;
char g[105][105];
int main()
{
cin >> H >> W;
for (int i = 1; i <= H; i++)
for (int j = 1; j <= W; j++)
cin >> g[i][j];
for (int i = 1; i <= H; i++)
for (int j = 1; j <= W - 1; j++)
if (g[i][j] == 'T' && g[i][j + 1] == 'T')
g[i][j] = 'P', g[i][j + 1] = 'C';
for (int i = 1; i <= H; i++)
{
for (int j = 1; j <= W; j++)
cout << g[i][j];
cout << "\n";
}
return 0;
}
给定正整数 和 。
你将重复下面操作,直到 :
需要操作多少次。
。
显然这就是辗转相减法,考虑到数据范围,用辗转相除快速处理即可。
#include <bits/stdc++.h>
#define int long long
using namespace std;
int ans;
void gcd(int a, int b)
{
if (a != b)
{
if (a % b != 0)
{
ans += a / b;
gcd(b, a % b);
}
else
ans += a / b - 1;
}
}
signed main()
{
ios::sync_with_stdio(false);
cin.tie(0);
int a, b;
cin >> a >> b;
ans = 0;
gcd(a, b);
cout << ans << "\n";
return 0;
}
有 道菜,第 道菜的售价是 元。
现在 Taka 要来吃饭,他至少要吃一份菜。他可以随便点餐,可以不吃某道菜,或者某道菜吃一份或多份。显然会有很多种最终的菜单价格。
请输出所有可能的菜单价格中的第 小的。
如果数据范围很小,那么显然就是个背包。随着每道菜的到来,根据前面菜最小的 种价格生成新的最小的 种价格。
但是数据范围有点大。那么可以用一个 set
来存可能的价格。这题时空限制给的很宽(3 sec / 1024 MB
),那我也懒得清空了,直接往里堆吧。
#include <bits/stdc++.h>
#define int long long
using namespace std;
int n, k, ai;
set<int> s;
signed main()
{
cin >> n >> k;
s.insert(0);
for (int i = 1; i <= n; i++)
{
cin >> ai;
auto it = s.begin();
for (int j = 1; j <= k; j++)
{
s.insert((*it) + ai);
it++;
}
}
auto it = s.begin();
for (int i = 1; i <= k; i++)
it++;
cout << (*it) << endl;
return 0;
}