日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

20190718考试70分记

發(fā)布時間:2023/12/10 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 20190718考试70分记 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

又考試了,這次題明顯感覺難多了,騙了不少分,竟然rk13

第一題一看不可做,然后看第二題

第二題一開始也沒有思路,然后我就看上了k<=1的情況,

顯然k=0時只要求所有數(shù)的gcd即可,

k=1的話枚舉每一個樹,給它加1,再求gcd,取gcd最大值

然后看第三題,k<=4有10%的數(shù)據(jù),而且樣例已經(jīng)告訴你了k=2和k=3的答案,

那么剩下的只有k=0或k=1或k=4;

k=0是0,k=1是1,k=4的話數(shù)據(jù)小,dfs暴力跑出來了。

這樣我就想著暴力跑更多的點(diǎn),于是有了下面的暴力代碼:

1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<cmath> 5 #define ll long long 6 #define re register 7 using namespace std; 8 const ll mod=1e9+7; 9 ll tot,ans=0,son[10005][3]; 10 bool vis[10005]; 11 ll to[10005],nxt[10005],pre[10005],cnt; 12 inline void add(re ll u,re ll v){ 13 cnt++,to[cnt]=v,nxt[cnt]=pre[u],pre[u]=cnt; 14 } 15 inline void build(re ll k,re ll l,re ll r){ 16 if(l==r) return ; 17 if((k<<1)>tot) return ; 18 son[k][1]=k<<1; 19 son[k][2]=k<<1|1; 20 ll mid=(l+r)>>1; 21 build(k<<1,l,mid); 22 build(k<<1|1,mid+1,r); 23 } 24 inline void DFS(re ll x,re ll now){ 25 for(re ll i=1;i<=2;i++){ 26 if(son[now][i]==0) continue; 27 add(x,son[now][i]),add(son[now][i],x); 28 DFS(x,son[now][i]); 29 } 30 } 31 inline void dfs(re ll x){ 32 ans++; 33 vis[x]=1; 34 for(re ll i=pre[x];i;i=nxt[i]){ 35 if(!vis[to[i]]) 36 dfs(to[i]); 37 } 38 vis[x]=0; 39 } 40 signed main(){ 41 //freopen("data.out","w",stdout); 42 for(re ll i=1;i<=10;i++){ 43 cnt=0; 44 memset(pre,0,sizeof(pre)); 45 tot=(1<<i)-1; 46 build(1,1,tot); 47 for(re ll j=1;j<=tot;j++){ 48 DFS(j,j); 49 } 50 ans=0; 51 for(re ll j=1;j<=tot;j++){ 52 dfs(j); 53 ans=((ans>=mod)?(ans-mod):ans); 54 } 55 cout<<"ans"<<i<<"="<<ans<<endl; 56 } 57 return 0; 58 } View Code

但是它很不給力,兩個小時只跑出5個點(diǎn),然后沒辦法就粘上去了

然后又看第二題

越看越像二分,然后打了個二分,模了幾個樣例都過了,復(fù)雜度也差不多,就交上去了

最后第一題只好cout<<0<<endl;竟然還有20分!

20+40+10=70,我真是撞大運(yùn)了

附:二分40分代碼(其實(shí)這題不具備決策單調(diào)性,二分是錯誤的)

1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #define MAXN 105 5 #define ll long long 6 #define re register 7 using namespace std; 8 ll n,k,a[MAXN],gcd,r=0,l=1,mid,ans=0,max_day,max_a; 9 ll b[MAXN]; 10 bool is_stop[MAXN]; 11 inline ll GCD(ll a,ll b){ 12 return b==0?a:GCD(b,a%b); 13 } 14 inline ll judge(ll x){ 15 memset(b,0,sizeof(b)); 16 memset(is_stop,0,sizeof(is_stop)); 17 ll res=0; 18 for(re ll i=x;i<=max_day;i+=x){ 19 for(re ll j=1;j<=n;j++){ 20 if(is_stop[j]) continue; 21 b[j]+=x; 22 if(b[j]>=a[j]){ 23 res+=(b[j]-a[j]); 24 is_stop[j]=1; 25 } 26 } 27 } 28 return res; 29 } 30 inline ll max(ll a,ll b){return a>b?a:b;} 31 signed main(){ 32 scanf("%lld%lld",&n,&k); 33 if(k==0){ 34 for(re ll i=1;i<=n;i++){ 35 scanf("%lld",&a[i]); 36 if(a[i]==1){ 37 cout<<1<<endl; 38 return 0; 39 } 40 if(i==1) gcd=a[i]; 41 else gcd=GCD(gcd,a[i]); 42 } 43 printf("%lld\n",gcd); 44 return 0; 45 } 46 if(k==1){ 47 for(re ll i=1;i<=n;i++){ 48 scanf("%lld",&a[i]); 49 if(i==1) gcd=a[i]; 50 else gcd=GCD(gcd,a[i]); 51 } 52 for(re ll i=1;i<=n;i++){ 53 a[i]++; 54 ll temp=a[1]; 55 for(re ll j=2;j<=n;j++){ 56 temp=GCD(temp,a[j]); 57 } 58 a[i]--; 59 gcd=max(gcd,temp); 60 } 61 printf("%lld\n",gcd); 62 return 0; 63 } 64 for(re ll i=1;i<=n;i++){ 65 scanf("%lld",&a[i]); 66 r=max(r,a[i]); 67 } 68 max_a=r; 69 r+=k; 70 while(l<=r){ 71 mid=(l+r)>>1; 72 if(max_a%mid==0) max_day=max_a; 73 else max_day=(max_a/mid+1)*mid; 74 if(judge(mid)<=k){ 75 ans=max(ans,mid),l=mid+1; 76 }else r=mid-1; 77 } 78 printf("%lld\n",ans); 79 return 0; 80 } View Code

?

轉(zhuǎn)載于:https://www.cnblogs.com/Juve/p/11206353.html

總結(jié)

以上是生活随笔為你收集整理的20190718考试70分记的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。