训练情况
赛后反思
有幸抢到了签到题的一血,据说是去年杭电新生赛,题面写的很神秘,简单题差点不会做了,还被卡常TLE了一发
1008 金牌
签到题,统计Au数量和Ag、Cu数量,因为Ag和Cu能合出来一个Au,所以答案是 Au+min(Ag,cu)
点击查看代码
#include <bits/stdc++.h>
#define int long long
#define endl '\n'using namespace std;void solve(){int n; cin>>n;int cnt1 = 0,cnt2 = 0;int ans = 0;for(int i = 1;i<=n;i++){string s; cin>>s;if(s == "Au") ans++;else if(s == "Ag") cnt1++;else if(s == "Cu") cnt2++;}cout<<ans+min(cnt1,cnt2)<<endl;
}signed main(){int T; cin>>T; while(T--)solve();return 0;
}
1010 绝对值
题面写的很神秘,实则划分我们可以每个数都划分,区间长度为 1,那就等效于每个数取绝对值,这题答案要最大,那这题实际上就是绝对值前缀和上再求个和就是答案了
点击查看代码
#include <bits/stdc++.h>
#define int long long
#define endl '\n'using namespace std;void solve(){int n; cin>>n;vector<int> a(n + 1);for(int i = 1;i<=n;i++) cin>>a[i],a[i] = abs(a[i]);for(int i = 1;i<=n;i++) a[i] += a[i-1];int ans = 0;for(int i = 1;i<=n;i++) ans += a[i];cout<<ans<<endl;
}signed main(){// int T; cin>>T; while(T--)solve();return 0;
}
1003 找回x
差点没开出来的简单题,我们把等号左边全部加起来,右边全部加起来,等号左边 x 提出来,实则就是 \(\sum{a_i} x + \sum{b_i} = \sum{c_i}\),直接对 a,b,c 数列求和反解 x 即可。
点击查看代码
#include <bits/stdc++.h>
#define int long long
#define endl '\n'using namespace std;const int N = 2e5 + 3;void solve(){int n; cin>>n;vector<int> a(n + 1),b(n + 1),c(n + 1);int suma = 0,sumb = 0,sumc = 0;for(int i = 1;i<=n;i++) cin>>a[i],suma+=a[i];for(int i = 1;i<=n;i++) cin>>b[i],sumb+=b[i];for(int i = 1;i<=n;i++) cin>>c[i],sumc+=c[i];cout<<(sumc-sumb)/suma<<endl;
}signed main(){ios::sync_with_stdio(false);cin.tie(0),cout.tie(0);int T; cin>>T; while(T--)solve();return 0;
}