文章目錄提示:文章寫完后,目錄可以自動生成,如何生成可參考右邊的幫助文檔
網站建設公司,為您提供網站建設,網站制作,網頁設計及定制網站建設服務,專注于成都企業(yè)網站建設,高端網頁制作,對成都隧道混凝土攪拌車等多個行業(yè)擁有豐富的網站建設經驗的網站建設公司。專業(yè)網站設計,網站優(yōu)化推廣哪家好,專業(yè)成都網站推廣優(yōu)化,H5建站,響應式網站。
本周的ACM學校的比賽題目放到這里供大家學習與交流,當然,題目適合入門算法并且至少會一種編程語言的同學學習,接下來講一下整體難度吧,此次比賽難度對我才學完c語言的同學而言還是比較難的,因為我不會數(shù)據結構和算法,當時比賽就做出來7道題目,這里經過自己的學習和研究終于把題解寫出來了,第一是便于我自己去復習和鞏固,第二就是大家學習和指出可以優(yōu)化的地方一起進步。蟹蟹。
A - k-LCM (easy version)#includeint t,n,m,k;
int main()
{ scanf("%d",&t);
while(t--)
{scanf("%d %d",&n,&k);
int a,b,c;
if(n&1)
a=b=n/2,c=1;
else
{ int tmp=n/2;
if(tmp&1)
a=b=tmp-1,c=2;
else
a=b=tmp/2,c=tmp;
}
printf("%d %d %d\n",a,b,c);
}
return 0;
}
這個題是來自cf的一道題目,考察了數(shù)學知識的掌握,當然我比賽是沒寫出來的,這里是學習了csdn的一些大佬才自己敲出來了。
B - Base K#include#includeint main()
{long long k;
scanf("%lld",&k);
long long a,b,i=0,j=0,sum=0,count=0;
scanf("%lld %lld",&a,&b);
while(a>0)
{sum+=a%10*pow(k,i++);
a=a/10;
}
while(b>0)
{count+=b%10*pow(k,j++);
b=b/10;
}
long long c=count*sum;
printf("%lld",c);
return 0;
}
這個題目是之前周賽考過的進制問題,并且這個題還不是大于十的進制問題可想難度很低了,但是要注意這個題必須注意定義的類型不然會溢出。
C - [例題]一維前綴和#includeint main()
{long long n,k,arr[100010],sum[100010];
scanf("%lld %lld",&n,&k);
sum[0]=0;
for(int i=1;i<=n;i++)
{scanf("%lld",&arr[i]);
int tmp=arr[i];
sum[i]=tmp+sum[i-1];
}
for(int i=1;i<=k;i++)
{int f,t;
scanf("%d %d",&f,&t);
printf("%lld\n",sum[t]-sum[f-1]);
}
return 0;
}
基礎算法前綴和問題,后面我學到AcWing的算法的時候會詳細講解前綴和的,這里簡單聊一聊我所知道的前綴和就是存放到數(shù)組里面防止溢出問題的發(fā)生其實就是類似于5!=4!*5這樣理解吧。
D - 最小新整數(shù)#include#includeint main()
{int t;
char arr[100010];
scanf("%d",&t);
while(t--)
{int k=0;
scanf("%s %d",arr,&k);
int len=strlen(arr);
while(k--)
{ for(int i=0;i if(arr[i]>arr[i+1])
{for(int j=i;jarr[j]=arr[j+1];
}
}
}
len--;
}
for(int i=0;i printf("%c",arr[i]);
}
printf("\n");
}
return 0;
}
基礎的貪心思想,其實我叫他覆蓋方法,初學者就是醬紫理解就行,后面咱們會算法了再更正好不好捏?我這里寫c語言的方法大家可能看著也舒服,別的地方可能就是c++一大串真的對于小白來說不容易看懂。
E - 驗證角谷猜想#includeint main()
{int n;
scanf("%d",&n);
while(n--)
{int m,flag=0,i=0,j=0,arr[100010];
scanf("%d",&m);
while(m!=1)
{ if(m%2==1)
{ flag=1;
arr[i++]=m;
m=m*3+1;
}
if(m%2==0)
{ m=m/2;
}
}
if(flag==0)
{ printf("No number can be output !");
}
else
{ for(j=0;j if(j!=i-1)
printf("%d ",arr[j]);
else
printf("%d",arr[j]);
}
}
printf("\n");
}
return 0;
}
這一道題真的就是語法題目捏,所以我想說的就是1.簡單的大家不要驕傲,2.flag標記法對于printf這種yes or no 的真的好用大家快學習用起來吧hhh~
F - T-primes#include#includeint arr[100010]={0};
void init()
{for(int i=2;i<100005;i++)
{if(arr[i]==0)
{ for(int j=i*2;j<100005;j+=i)
{ arr[j]=1;
}
}
}
}
int main()
{int t;
init();
scanf("%d",&t);
while(t--)
{long long n;
scanf("%lld",&n);
long long x=sqrt(n);
if(x*x==n&&x>1&&arr[x]==0)
{ printf("YES\n");
}
else printf("NO\n");
}
return 0;
}
emm埃式篩選法,上一期講過了,好好看看,對素數(shù)也算是一種技巧上的提高對吧?不僅僅要會暴力求解也要會一些小技巧。
G - Takahashi’s Secret題意:我有N個朋友,我跟X有小秘密,但是X會告訴a[X],a[X],會告訴a[a[X]],問最后一共能有多少個人知道這個秘密。
思路:定義兩個數(shù)組,一個是誰告訴誰的數(shù)組,一個數(shù)組用來記錄誰知道了,循環(huán)的條件就是告訴下一個人,但是下一個人的標志數(shù)組為1,代表已經知道了,循環(huán)就結束,最后再遍歷標志數(shù)組,記錄為1的,就代表知道了,最后輸出cnt;
#includeint main()
{int n,x,arr[100010]={0},book[100010]={0};
scanf("%d %d",&n,&x);
for(int i=1;i<=n;i++) scanf("%d",&arr[i]);
while(book[x]==0)
{book[x]=1;
x=arr[x];
}
int cnt=0;
for(int i=1;i<=n;i++)
{if(book[i]==1)
{ cnt++;
}
}
printf("%d\n",cnt);
return 0;
}
H - 親和數(shù)#includeint main()
{int t;
scanf("%d",&t);
while(t--)
{int flag=0,n,m,i=0,j=0,sum=0;
scanf("%d %d",&n,&m);
for(i=1;i if(n%i==0)
{ sum+=i;
}
}
if(sum!=m) flag=1;
sum=0;
for(j=1;j if(m%j==0)
{ sum+=j;
}
}
if(sum!=n) flag=1;
if(flag==1)
{ printf("NO\n");
}
else
{ printf("YES\n");
}
}
return 0;
}
簡單語法題。
I - Alena’s Schedule真是大家好好學習英語吧,這么長我都自閉了,大家看看題意和思路吧
題意:
有人要去上課,1代表有課,0代表沒課
這個人在有兩個及以上連續(xù)的沒課的時候,才會回家
然后問你這個人得在學校呆多
題解:
直接暴力掃一遍就好了
有課會呆在學校,沒課但是,上下都是課的,也會呆在學校
#includeint main()
{int n,arr[100010];
scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%d",&arr[i]);
int count=0;
for(int i=1;i<=n;i++)
{if(arr[i]==1)
count++;
if(arr[i]==0&&arr[i-1]==1&&arr[i+1]==1)
count++;
}
printf("%d\n",count);
return 0;
}
J - 最少攔截系統(tǒng)
題意描述:本題就是給你多個數(shù),統(tǒng)計里面的單調遞減子序列最少有幾個,大概就是先找第一個最長的遞減子序列(第一個攔截系統(tǒng)),然后在剩下的序列里面接著找最長的遞減子序列,看一共有多少個遞減子序列
這題可不敢像我一樣直接遍歷傻傻的錯了還不知道哪里錯了。
//大上升子序列模板題
#include#includeint main()
{int n,i,j,arr[5000]={0},f[5000]={0};
while(~scanf("%d",&n))
{for(i=1;i<=n;i++) scanf("%d",&arr[i]);
int max=1;
for(i=1;i<=n;i++)
{ f[i]=1;
for(j=1;j<=i;j++)
{ if(arr[i]>arr[j])
{f[i]=fmax(f[i],f[j]+1);
}
}
max=fmax(f[i],max);
}
printf("%d\n",max);
}
return 0;
}
K - Median Maximization這里沒圖了發(fā)送鏈接給大家
添加鏈接描述
這個題目目前我還不會,大家如果會可以call我,感謝你啦蟹蟹.
L - 大子矩陣這里沒圖了發(fā)送鏈接給大家
添加鏈接描述
題目來自杭電,
#include#include#includeint t,m,n,x,y,a;
long long sum[1005][1005];
long long arr[1005][1005];
int main()
{scanf("%d",&t);
while(t--)
{scanf("%d%d%d%d",&n,&m,&x,&y);
long long res=0;
memset(sum,0,sizeof sum);
memset(arr,0,sizeof arr);
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
{ scanf("%lld",&arr[i][j]);
sum[i][j]=sum[i][j-1]+arr[i][j];
}
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
{ sum[i][j]+=sum[i-1][j];
if(i>=x&&j>=y)
res=fmax(res,sum[i][j]-sum[i][j-y]-sum[i-x][j]+sum[i-x][j-y]);
}
printf("%lld\n",res);
}
return 0;
}
這里就是前綴和和差分模板,后面我會在我的算法學習當中詳細講解,希望大家到時候給我指點和方向蟹蟹.
總結1.打完這場周賽我自己的編程能力是有提升的這是確確實實感受到了,我在學校的藍橋杯選拔賽當中也獲得了補助的大力度的獎金,我的意思是說我希望大家未來不管這個比賽是否是學校組織的 或者 省組織的,更或者國家組織的大家都要以最最最好的心態(tài)和狀態(tài)去準備他去打好這場比賽,因為即使一題也寫不出來,但只要知道不足了,方可尋找下一步的方向,才可以去成長,進步
2.后面也感覺到了題難嘛,所有就是學習數(shù)據結構和算法是目前最最最重要和需要的事情,但是出發(fā)之前都需要檢驗自己目前的實力是否真的配去學習這些更加高級的知識呢?我想我是不夠的,因為c語言我只考了90分,并且我沒有把這些知識做成博客去方便自己去復習和鞏固,所以下面就要根據這些缺陷去打補漏洞戰(zhàn).
3.比賽后一定要去把錯題和不會的題去csdn這些網站上找題解去學習,因為編程題需要語言+數(shù)據結構+算法+積累題型的多少+天賦+努力(當然錯了大家可以指正)來決定,所以積累是必不可少的.
最后感謝看到這里的小伙伴,原編程路上有馥陪你,一起度過難關,學習進步,祝所有熱愛的人都能心想事成,加油吧! 曹子馥.
你是否還在尋找穩(wěn)定的海外服務器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準確流量調度確保服務器高可用性,企業(yè)級服務器適合批量采購,新人活動首月15元起,快前往官網查看詳情吧