A - Double Click
代码
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
const int N = 100010,mod = 1e9+7;
int n,m;
int main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
cin >> n >> m;
vector<int> a(n);
for(int i = 0;i < n; i++) cin >> a[i];
for(int i = 1;i < n; i++)
{
if(a[i] - a[i-1] <= m)
{
cout << a[i];
return 0;
}
}
cout << -1;
return 0;
}
B - chess960
做的时候题没看懂,后面才知道Parity是奇偶性。。。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
const int N = 100010,mod = 1e9+7;
int n,m;
int main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
string s;
cin >> s;
int b1 = -1,b2 = -1,r1 = -1,r2 = -1,k = -1;
for(int i = 0;i < s.size(); i++)
{
if(s[i] == 'K') k = i;
else if(s[i] == 'B' && b1 == -1) b1 = i;
else if(s[i] == 'B' && b1 != -1) b2 = i;
else if(s[i] == 'R' && r1 == -1) r1 = i;
else if(s[i] == 'R' && r1 != -1) r2 = i;
}
if(k >= r1 && k <= r2 && (b1 % 2) != (b2 % 2)) cout << "Yes";
else cout << "No";
return 0;
}
C - PC on the Table
分析
遇到TT就换PC
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
const int N = 100010,mod = 1e9+7;
int n,m;
char g[110][110];
int main()
{
// ios::sync_with_stdio(false);
// cin.tie(nullptr);
cin >> n >> m;
for(int i = 1;i <= n; i++) scanf("%s",g[i]+1);
for(int i = 1;i <= n; i++)
for(int j = 1;j < m; 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 <= n; i++)
printf("%s\n",g[i]+1);
return 0;
}
D - Count Subtractions
分析
我们将A,B两个数,始终认定A>B。
1.如果A % B = 0,A被B整除,那么答案加A/B-1,结束操作。
2.如果A % B != 0,A不能被B整除,那么答案加1,并操作A减去B,继续进行操作。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
const int N = 100010,mod = 1e9+7;
int n,m;
int main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
ll a, b;
cin >> a >> b;
ll ans = 0;
while(a != b)
{
if(a < b) swap(a,b);
if(b == 1)
{
ans += a - 1;
break;
}
if(a / b > 1)
{
ans += a / b;
a -= (a/b)*b;
if(a == 0)
{
ans--;
break;
}
if(a == b) ans--;
}
else
{
ans++;
a -= b;
}
}
cout << ans << '\n';
return 0;
}
E - Kth Takoyaki Set
分析
给我们n个物品,每个物品(有自己的价格)可以买任意多次,至少买一件物品,问我们所有购买的方案中第k个大的金额。我们可以发现我们要找第k大的数,我们可以从一个物品不买开始,去更新k次,我们用set容器去存和删,一可以去重,二该容器会自动排序,保证我们最后拿的是第k大的金额,因为每次更新都是拿当前容器最小的金额去更新,保证不重不漏。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
const int N = 100010,mod = 1e9+7;
int n,m;
ll a[15],f[15],cnt;
set<ll> s;
int main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
cin >> n >> m;
for(int i = 1;i <= n; i++) cin >> a[i];
sort(a+1,a+1+n);
s.insert(0);
while(m--)
{
ll x = *s.begin();
s.erase(x);
for(int i = 1;i <= n; i++)
{
s.insert(x + a[i]);
}
}
cout << *s.begin();
return 0;
}