此篇属于比赛题解集合(CF && AcWing Race)
链接
比赛地址
https://codeforces.com/contest/1822
考试过了 abcd
后来补了efg
思路先咕咕咕,先考试期中,传个代码
A
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<vector>
using namespace std;
int T;
const int N = 200;
int a[N];
int b[N];
vector<int>tmp;
void solve()
{
int n,m;
cin >> n >> m;
tmp.clear();
for(int i = 1;i <= n;i ++)
{
cin >> a[i];a[i] += i-1;
if(a[i] <= m) tmp.push_back(i);
}
int resid = 0;
int res = 0;
for(int i = 1;i<= n;i ++) cin >> b[i];
if(tmp.size())
{
for(auto t:tmp)
{
if(res < b[t])
{
resid = t;
res = b[t];
}
}
cout << resid << endl;
}
else cout << -1 << endl;
}
int main()
{
ios::sync_with_stdio(false);
cin >> T;
while(T--)
solve();
}
B
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<vector>
#define int long long
const int INF = 0x3f3f3f3f3f3f3f3f;
using namespace std;
const int N = 2e5 + 10;
int T;
int n;
int a[N];
int cnt = 0;
int maxxx;
void solve2()
{
sort(a + 1, a + n + 1);
if (a[1] < 0 && a[2] < 0)
{
maxxx = max(a[1] * a[2], maxxx);
}
if (a[n] > 0 && a[n - 1] > 0)
{
maxxx = max(a[n] * a[n - 1], maxxx);
}
if (cnt)
{
maxxx = max(maxxx,0ll);
}
maxxx = max(maxxx, a[1] * a[2]);
maxxx = max(maxxx, a[n] * a[n - 1]);
}
void solve()
{
cin >> n;
maxxx= -INF;
cnt = 0;
for (int i = 1; i <= n; i ++ )
{
cin >> a[i];
if (!a[i]) cnt ++ ;
}
if (cnt == n || cnt == n - 1)
{
cout << 0 << endl;
return;
}
solve2();
cout << maxxx << endl;
}
signed main()
{
ios::sync_with_stdio(false);
cin >> T;
while(T--)
solve();
}
C
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<cmath>
#define int long long
using namespace std;
int T;
int a;
void solve()
{
cin >> a;
a = a - 3;
cout << 9 * a + a * (a - 1) + 17 << endl;
}
signed main()
{
ios::sync_with_stdio(false);
cin >> T;
while(T--)
solve();
}
D
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<vector>
using namespace std;
const int N = 2e5 + 10;
int T;
int n;
int a[N];
void solve()
{
cin >> n;
if(n == 1)
{
cout << 1 << endl;
return;
}
if(n%2)
{
cout << -1 << endl;
return;
}
a[0] = n;a[n/2]=n/2;
int x = 1;
for(int i = 1;i < n/2;i ++)
{
if(x)
{
a[i] = n - i;
a[n-i] = i;
}
else
{
a[i] = i;
a[n-i] = n - i;
}
x ^= 1;
}
for(int i = 0;i < n;i ++) cout << a[i] << ' ';
cout << endl;
}
int main()
{
ios::sync_with_stdio(false);
cin >> T;
while(T--)
solve();
}
E
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<vector>
#define int long long
#define pb push_back
using namespace std;
const int N = 2e5 + 10;
int T;
int cnt[30];
int single_cnt[30];
bool used[30];
vector<int> id;
string x;
void init()
{
id.clear();
memset(used,false,sizeof used);
memset(cnt,0,sizeof cnt);
memset(single_cnt,0,sizeof single_cnt);
}
void pr()
{
for(int i = 0;i < 26;i ++)
cout << cnt[i] << ' ';
cout << endl;
}
void solve()
{
init();
int n;cin >> n;
cin >> x;
if(n % 2)
{
cout << -1 << endl;
return;
}
for(int i = 0;i < n/2;i ++)
{
single_cnt[x[i]-'a'] ++;
single_cnt[x[n - i - 1]-'a']++;
if(x[i] == x[n - i - 1])
{
int ch = x[i] - 'a';
if(!used[ch])
id.pb(ch),used[ch] = true;
cnt[ch]++;
}
}
//pr();
for(int i = 0;i < 26;i ++)
if(single_cnt[i] > n/2)
{
cout << -1 << endl;
return;
}
int sum = 0;int res = 0;
//pr();
//cout << "id ";
//for(int t : id)
//cout << t << ' ';
//cout << endl;
for(int t : id) sum += cnt[t]; int odd = sum%2;
for(int t : id)
{
if(cnt[t] > sum/2)
{
res += sum/2;
res += cnt[t] - sum/2;
cout << res << endl;
return;
}
}
res += sum/2 + odd;
cout << res << endl;
}
signed main()
{
ios::sync_with_stdio(false);
cin >> T;
while(T--)
solve();
}
F
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<vector>
#include<queue>
using namespace std;
using LL = long long;
int T;
void solve()
{
int n,k,c;
cin >> n >> k >> c;
vector<vector<int> >g(n);
for(int i = 0;i < n - 1;i ++)
{
int a,b;cin >> a >> b;a--,b--;
g[a].push_back(b);
g[b].push_back(a);
}
auto bfs = [&](int st)
{
vector<int> d(n,-1);
queue<int> q;
d[st] = 0;
q.push(st);
while(!q.empty())
{
int t = q.front();q.pop();
for(auto j : g[t])
{
if(d[j] == -1)
{
d[j] = d[t] + 1;
q.push(j);
}
}
}
return d;
};
auto d1 = bfs(0);
int p = max_element(d1.begin(),d1.end()) - d1.begin();
auto d2 = bfs(p);
int q = max_element(d2.begin(),d2.end()) - d2.begin();
auto d3 = bfs(q);
LL res = 0;
for(int i = 0;i < n;i ++)
res = max(res,1LL * k * max(d2[i],d3[i]) - 1ll * c * d1[i]);
cout << res << endl;
}
int main()
{
ios::sync_with_stdio(false);
cin >> T;
while(T--)
solve();
}
G
思路代码来自cup神
#include<iostream>
#include<cstring>
#include<vector>
#include<map>
using namespace std;
using LL = long long;
vector<int> go_fac(int n){
vector<int> f;
for(int i = 1; i * i <= n; i++){
if (n % i == 0){
f.push_back(i);
if (i * i != n) f.push_back(n / i);
}
}
return f;
}
int main(){
cin.tie(0);
cout.tie(0);
ios::sync_with_stdio(0);
const int uplimit = 1e9;
const int S = 1e6;
auto C3 = [&](int x){
return 1LL * x * (x - 1) * (x - 2);
};
int T;
cin >> T;
while(T--){
int n;
cin >> n;
map<int, int> mp;
for(int i = 1; i <= n; i++){
int x;
cin >> x;
mp[x] += 1;
}
LL ans = 0;
for(auto &[x, y] : mp){
ans += C3(y);
if (x >= S){
for(int j = 2; 1LL * j * x <= uplimit; j++){
if (x % j == 0 && mp.count(x * j) && mp.count(x / j)){
ans += 1LL * y * mp[x * j] * mp[x / j];
}
}
}
else{
auto f = go_fac(x);
sort(f.begin(), f.end());
for(auto u : f){
if (u == 1) continue;
if (1LL * x * u > uplimit) break;
if (mp.count(x / u) && mp.count(x * u)){
ans += 1LL * y * mp[x / u] * mp[x * u];
}
}
}
}
cout << ans << '\n';
}
}