Gym102174 (The 14-th BIT Campus Programming Contest)

落日映苍穹つ 2021-09-19 17:00 348阅读 0赞



































Sloved A B C D E F G H I J K L
7/12 O . O . O O . O . O O .
  • O for passing during the contest
  • Ø for passing after the contest
  • ! for attempted but failed
  • · for having not attempted yet

A.两只脑斧(firevolt,0:05,+1)

签到题,读题找规律即可

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. #define maxn 100005
  4. #define ll long long
  5. int t,n,m,k;
  6. string b;
  7. int main(){
  8. cin>>n;
  9. for(int i=1;i<=n;i++){
  10. cin>>b;
  11. if(b[0]=='0'){
  12. cout<<'X';
  13. }
  14. else if(b[0]=='1'||b[0]=='3'||b[0]=='5'){
  15. cout<<'E';
  16. }
  17. else
  18. cout<<'I';
  19. }
  20. }

C 赛尔逵传说(firevolt,0:57,+3)

由于吃果实获得好攻击力和自身攻击力一样,所以吃一个果实相当于多攻击一次,即少被攻击一次,所以将果实全部用在攻击力高的怪物上即为最优解
爆int

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. #define maxn 100005
  4. #define ll long long
  5. ll t,n,m,k;
  6. struct ac{
  7. ll x,y;
  8. }f[maxn];
  9. bool cmp(ac a,ac b){
  10. return a.y>b.y||(a.y==b.y&&a.x<b.x);
  11. }
  12. int main(){
  13. cin>>n>>k>>m;
  14. for(ll i=1;i<=n;i++){
  15. cin>>f[i].x>>f[i].y;
  16. }
  17. sort(f+1,f+1+n,cmp);
  18. ll z=0;
  19. for(ll i=1;i<=n;i++){
  20. ll zz=f[i].x/k;
  21. if(f[i].x%k==0)
  22. zz--;
  23. if(m>0&&zz>=1){
  24. if(m>=zz){
  25. m-=zz;
  26. continue;
  27. }
  28. else{
  29. zz-=m;
  30. m=0;
  31. }
  32. }
  33. z=z+zz*f[i].y;
  34. }
  35. cout<<z<<endl;
  36. }

E 只有一端开口的瓶子(indiewar,01:57,+1)

考虑最多的情况只需要2个栈,这时形成了一个3个桩的汉诺塔,考虑特判只需要1的情况,比较好的做法是直接用一个栈模拟,如果成功那就只需要一个栈(废话)

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. #define rep(i,a,n) for (int i=a;i<n;i++)
  4. #define per(i,a,n) for (int i=n-1;i>=a;i--)
  5. #define pb push_back
  6. #define mp make_pair
  7. #define all(x) (x).begin(),(x).end()
  8. #define fi first
  9. #define se second
  10. #define SZ(x) ((int)(x).size())
  11. typedef vector<int> VI;
  12. typedef long long ll;
  13. typedef pair<int,int> PII;
  14. const ll mod=1000000007;
  15. ll powmod(ll a,ll b) { ll res=1;a%=mod; assert(b>=0); for(;b;b>>=1){ if(b&1)res=res*a%mod;a=a*a%mod;}return res;}
  16. ll gcd(ll a,ll b) { return b?gcd(b,a%b):a;}
  17. const int maxn = 1e5+1000;
  18. int T,n;
  19. int a[maxn];
  20. int b[maxn];
  21. int main(int argc, char const *argv[])
  22. {
  23. cin >> T;
  24. while(T--)
  25. {
  26. cin >> n;
  27. rep(i,0,n)
  28. {
  29. cin >> a[i];
  30. }
  31. stack<int> st;
  32. int t = 1;
  33. rep(i,0,n)
  34. {
  35. st.push(a[i]);
  36. while(!st.empty() && st.top() == t)
  37. {
  38. t++;
  39. st.pop();
  40. }
  41. }
  42. if(st.empty())
  43. {
  44. cout << 1 << endl;
  45. }
  46. else
  47. {
  48. cout << 2 << endl;
  49. }
  50. }
  51. return 0;
  52. }

F风王之瞳(huhaowen,0:57,+1)

O(n)

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. typedef long long ll;
  4. const int N = 1e5 + 7;
  5. const int inf = 0x3f3f3f3f;
  6. const double pi = acos(-1.0);
  7. const double eps = 1e-6;
  8. ll n,m,t;
  9. int main()
  10. {
  11. //freopen("in.txt","r",stdin);
  12. //freopen("out.txt","w",stdout);
  13. scanf("%lld",&t);
  14. while(t--){
  15. scanf("%lld%lld",&n,&m);
  16. if(n > m) swap(n,m);
  17. ll ans = 0;
  18. for(int i = 1;i <= n;++i){
  19. ans += (n + 1 - i) * (m + 1 - i) * i;
  20. }
  21. printf("%lld\n",ans);
  22. }
  23. return 0;
  24. }

H目标是成为数论大师(huhaowen,01:59,+9)

暴力枚举-1e5+7到1e5+7(其实5000应该就够了)判断定义域内满足的解
之前只考虑了定义域,这个题目显然还有值域的约束

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. typedef long long ll;
  4. const int N = 1e5 + 7;
  5. const int inf = 0x3f3f3f3f;
  6. const double pi = acos(-1.0);
  7. const double eps = 1e-6;
  8. ll n,m,t,a,b;
  9. ll s[N];
  10. int main()
  11. {
  12. //freopen("in.txt","r",stdin);
  13. //freopen("out.txt","w",stdout);
  14. scanf("%lld",&t);
  15. while(t--){
  16. ll cnt = 0;
  17. scanf("%lld%lld",&a,&b);
  18. for(int i = -N;i < N;++i){
  19. if(i < b) ;
  20. else if(a * i == (i - b) * (i - b)) s[cnt++] = i;
  21. }
  22. printf("%lld\n",cnt);
  23. for(int i = 0;i < cnt;++i) printf("%lld%c",s[i],i == cnt - 1 ? '\n' : ' ');
  24. }
  25. return 0;
  26. }

J金色传说(indiewar,02:30,+2)

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. #define rep(i,a,n) for (int i=a;i<n;i++)
  4. #define per(i,a,n) for (int i=n-1;i>=a;i--)
  5. #define pb push_back
  6. #define mp make_pair
  7. #define all(x) (x).begin(),(x).end()
  8. #define fi first
  9. #define se second
  10. #define SZ(x) ((int)(x).size())
  11. typedef vector<int> VI;
  12. typedef long long ll;
  13. typedef pair<int,int> PII;
  14. const ll mod=998244353;
  15. ll powmod(ll a,ll b) { ll res=1;a%=mod; assert(b>=0); for(;b;b>>=1){ if(b&1)res=res*a%mod;a=a*a%mod;}return res;}
  16. ll gcd(ll a,ll b) { return b?gcd(b,a%b):a;}
  17. const int maxn = 5e5 + 1000;
  18. ll a[maxn],b[maxn];
  19. int n;
  20. int main(int argc, char const *argv[])
  21. {
  22. ios_base::sync_with_stdio(false), cin.tie(0), cout.tie(0);
  23. rep(i,1,maxn-100)
  24. {
  25. ll tem = powmod(10,i);
  26. a[i] = (tem-1) * tem / 2 % mod;
  27. }
  28. b[1] = 10;
  29. b[2] = 100;
  30. rep(i,3,maxn-100)
  31. {
  32. b[i] = b[i-1] * 10 % mod + b[i-2] * 20 % mod;
  33. b[i] %= mod;
  34. }
  35. int t;
  36. cin >> t;
  37. while(t--)
  38. {
  39. cin >> n;
  40. ll ans = a[n];
  41. rep(i,1,n-1)//1 -> n-2
  42. {
  43. ans += (a[i] * 2 * b[n-i-1] % mod)%mod;
  44. ans %= mod;
  45. }
  46. cout << ans << endl;
  47. }
  48. return 0;
  49. }

K多项式求导(indiewar,0:21,+1)

模拟求导过程即可,比较好写的方法是从前往后更新

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. #define rep(i,a,n) for (int i=a;i<n;i++)
  4. #define per(i,a,n) for (int i=n-1;i>=a;i--)
  5. #define pb push_back
  6. #define mp make_pair
  7. #define all(x) (x).begin(),(x).end()
  8. #define fi first
  9. #define se second
  10. #define SZ(x) ((int)(x).size())
  11. typedef vector<int> VI;
  12. typedef long long ll;
  13. typedef pair<int,int> PII;
  14. const ll mod=998244353 ;
  15. ll powmod(ll a,ll b) { ll res=1;a%=mod; assert(b>=0); for(;b;b>>=1){ if(b&1)res=res*a%mod;a=a*a%mod;}return res;}
  16. ll gcd(ll a,ll b) { return b?gcd(b,a%b):a;}
  17. const int maxn = 110;
  18. ll n,k;
  19. ll a[maxn];
  20. int main(int argc, char const *argv[])
  21. {
  22. ios_base::sync_with_stdio(false), cin.tie(0), cout.tie(0);
  23. cin >> n >> k;
  24. per(i,0,n+1)
  25. {
  26. cin >> a[i];
  27. //a[i] = a[i] % mod * i % mod;
  28. }
  29. rep(i,0,k)
  30. {
  31. rep(j,0,n+1)
  32. a[j] = a[j+1] % mod * (j+1) % mod;
  33. }
  34. cout << 0;
  35. per(i,0,n)
  36. cout << " " << a[i];
  37. cout << endl;
  38. return 0;
  39. }

发表评论

表情:
评论列表 (有 0 条评论,348人围观)

还没有评论,来说两句吧...

相关阅读