日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

2021辽宁省大学生程序设计竞赛(热身赛)【完结】

發布時間:2025/3/20 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 2021辽宁省大学生程序设计竞赛(热身赛)【完结】 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

為馬上要來的ccpc省賽做準備,打一下其他省的熱身賽玩玩

目錄

  • A: a+b+c【簽到】
  • B: 遼寧的記憶【簽到】
  • C: 愛書人的資料查詢【KMP】
  • D: 巧克力蛋糕【簽到】
  • E:香辣牛肉面【數論】

A: a+b+c【簽到】


https://ac.nowcoder.com/acm/contest/22351/A

#include<bits/stdc++.h> using namespace std; int main(void) {int t; cin>>t;while(t--){long long int a,b,c; cin>>a>>b>>c;cout<<a+b+c<<endl; } }

B: 遼寧的記憶【簽到】


https://ac.nowcoder.com/acm/contest/22351/B

#include<bits/stdc++.h> using namespace std; int main(void) {int t; cin>>t;while(t--){long long int a; cin>>a;cout<<a+1946<<endl;} }

C: 愛書人的資料查詢【KMP】


https://ac.nowcoder.com/acm/contest/22351#question
本想直接暴力,加O2等優化看可不可以莽過去。后來不行,那直接KMP板子走一波。

#include<bits/stdc++.h> using namespace std; int t,n; string s[50],w; long long int solve() {for(int i=0;i<n;i++) s[i]="*"+s[i];w="*"+w;//讓其下標從1開始,便于寫long long int ans=0;for(int k=0;k<n;k++){string a=s[k];string b=w;int ne[50]={0};int len1=a.size()-1;int len2=b.size()-1;for(int i=2,j=0;i<=len1;i++){while(j&&a[i]!=a[j+1]) j=ne[j];if(a[i]==a[j+1]) j++;ne[i]=j;}for(int i=1,j=0;i<=len2;i++){while(j&&b[i]!=a[j+1]) j=ne[j];if(b[i]==a[j+1]) j++;if(j==len1){ans++;j=ne[j];}}}return ans; } int main(void) {cin>>t;while(t--){scanf("%d",&n);for(int i=0;i<n;i++) cin>>s[i];cin>>w; long long int cnt=solve();printf("%d\n",cnt);}return 0; }

D: 巧克力蛋糕【簽到】


https://ac.nowcoder.com/acm/contest/22351/D
任意倆條邊交一個點。故Cn2C_n^2Cn2?種可能

#include<bits/stdc++.h> using namespace std; int main(void) {int t; cin>>t;while(t--){long long int n; cin>>n;cout<<n*(n-1)/2<<endl;} }

E:香辣牛肉面【數論】


https://ac.nowcoder.com/acm/contest/22351/E
詳細的題解
通過分析你會發現它本質求的一個[1,n]所有數的約數個數之和的問題
O(n)的做法 過不去得加速

#include<iostream> using namespace std;int main() {int n,cnt=0;cin>>n;for(int i=1;i<=n;i++)//[1,n]中的所有數含有約數i的有n/i個(向下取整)cnt+=n/i;cout<<cnt<<endl;return 0; }

加速法:(O(開根號n))可以過

#include<bits/stdc++.h> using namespace std; typedef long long int LL; int main() {int t; cin>>t;while(t--){LL n,ans=0;scanf("%lld",&n);for(LL i=1,j;i<=n;i=j+1)//節約時間{ j=n/(n/i);ans+=(n/i)*(j-i+1);}printf("%lld\n",ans);}return 0; }

總結

以上是生活随笔為你收集整理的2021辽宁省大学生程序设计竞赛(热身赛)【完结】的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。