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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

CF 459A 459B 459C 459D 459E

發布時間:2024/1/17 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 CF 459A 459B 459C 459D 459E 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

http://codeforces.com/contest/459

?

A題 Pashmak and Garden

化簡化簡水題,都告訴平行坐標軸了,數據還出了對角線,后面兩個點坐標給的范圍也不錯

?

#include <cstdio> int x[4],y[4]; int abs(int n){return n<0?-n:n; } int main(){scanf("%d%d%d%d",x,y,x+1,y+1);int dx=abs(x[0]-x[1]);int dy=abs(y[0]-y[1]);if(dx*dy==0&&dx!=dy){printf("%d %d %d %d\n",x[0]+dy,y[0]+dx,x[1]+dy,y[1]+dx);}else if(dx==dy&&dx!=0){printf("%d %d %d %d\n",x[1],y[0],x[0],y[1]);}else printf("-1\n");return 0; }

  B:Pashmak and Flowers

被hack的一次出在long long

#include <cstdio> #include <algorithm> using namespace std; int n; int maxt=-1,mint=0x7fffffff; long long maxn=0,minn=0; int main(){scanf("%d",&n);long long ans;for(int i=0;i<n;i++){int temp;scanf("%d",&temp);if(temp>maxt){maxt=temp;maxn=1;}else if(temp==maxt)maxn++;if(temp<mint){mint=temp;minn=1;}else if(temp==mint)minn++;}if(maxt==mint)ans=maxn*(minn-1)/2;else ans=minn*maxn;printf("%d %I64d\n",maxt-mint,ans);return 0;}

  

C:Pashmak and Buses

純鴿籠,就是看看有沒有n>k的情況就好,每次看這次分到一個鴿籠的數目

#include <cstdio> using namespace std; int n,k,d; int ind[1001]; int main(){scanf("%d%d%d",&n,&k,&d);for(int i=1;i<=1000;i++)ind[i]=i;int tn=1;for(int td=0;td<d;td++){tn*=k;if(tn>n)break;}//為了防爆intif(tn<n)puts("-1");else for(int td=0;td<d;td++){for(int i=0;i<n;i++){printf("%d%c",ind[i]%k+1,i==n-1?'\n':' ');ind[i]=(ind[i]+k-1)/k;}tn=(tn+k-1)/k;}return 0; }

?

D:Pashmak and Parmida's problem

map統計+樹狀數組

每從右邊(f(j)小)更新答案(sum(f(i)-1)到1)的時候把f(j)加進樹狀數組就行了

#pragma pack(1) #include <cstdio> #include <map> using namespace std; map<int,int> mp; int a[1000000],bit[1000000],pr[1000000];//看成1e5錯一回 long long ans; int n; int main(){scanf("%d",&n);for(int i=0;i<n;i++){scanf("%d",a+i);pr[i]=mp[a[i]]++;}for(int i=n-1;i>-1;i--){for(int j=pr[i];j!=0;j-=(j&-j))ans+=bit[j];for(int j=mp[a[i]]-pr[i];j<n;j+=(j&-j)){bit[j]++;}}printf("%I64d\n",ans);return 0; }

 E:Pashmak and Graph

dp,要注意的是同一個cost值可能發生相互修改的情況,所以拷貝出來再拷貝回去

 

#include <cstdio> #include <algorithm> using namespace std; const int maxn=3e5+1; struct edge{int f,t,c;bool operator <(const edge & e2) const {return c<e2.c;} }e[maxn]; int n,m; int dp[maxn],tt[maxn],pre[maxn]; int main(){scanf("%d%d",&n,&m);for(int i=0;i<m;i++)scanf("%d%d%d",&e[i].f,&e[i].t,&e[i].c);sort(e,e+m);int j;for(int i=0;i<m;i=j){int cnt=0;for(j=i;j<m&&e[j].c==e[i].c;j++){pre[cnt]=dp[e[j].f]+1;tt[cnt++]=e[j].t;}while(cnt-->=0){dp[tt[cnt]]=max(dp[tt[cnt]],pre[cnt]);}}int ans=0;for(int i=1;i<=n;i++)ans=max(ans,dp[i]);printf("%d\n",ans);return 0; }

  這是更好的姿勢,邊dp,點更新

#include <cstdio> #include <algorithm> using namespace std; const int maxn=3e5+1; const int maxm=3e5+1; struct edge{int f,t,c;bool operator <(const edge & e2) const {return c<e2.c;} }e[maxm]; int n,m; int dp[maxm],tc[maxn]; int main(){scanf("%d%d",&n,&m);for(int i=0;i<m;i++)scanf("%d%d%d",&e[i].f,&e[i].t,&e[i].c);sort(e,e+m);int j=0;for(int i=0;i<m;i++){while(e[j].c<e[i].c){tc[e[j].t]=max(dp[j],tc[e[j].t]),j++;}dp[i]=tc[e[i].f]+1;//learning}int ans=0;for(int i=0;i<m;i++)ans=max(ans,dp[i]);printf("%d\n",ans);return 0; }

  

轉載于:https://www.cnblogs.com/xuesu/p/3917284.html

總結

以上是生活随笔為你收集整理的CF 459A 459B 459C 459D 459E的全部內容,希望文章能夠幫你解決所遇到的問題。

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