第一次雙周賽+基礎存圖
成都創(chuàng)新互聯公司致力于成都網站設計、網站制作,成都網站設計,集團網站建設等服務標準化,推過標準化降低中小企業(yè)的建站的成本,并持續(xù)提升建站的定制化服務水平進行質量交付,讓企業(yè)網站從市場競爭中脫穎而出。 選擇成都創(chuàng)新互聯公司,就選擇了安全、穩(wěn)定、美觀的網站建設服務!#include
using namespace std;
char str1[1005],str2[1005];
int a[1005],b[1005],c[2010];
int zhuan(char c) //寫個函數把字符轉換為十進制
{
if(c>='0' && c<='9')
return c-'0';
else
return c-'A'+10;
}
int main()
{
cin>>str1>>str2;
int len1=strlen(str1);
for(int i=0;i ???a[i+1]=zhuan(str1[len1-i-1]); int len2=strlen(str2); for(int i=0;i b[i+1]=zhuan(str2[len2-i-1]);//把兩個字符串倒序放入 int flag=0;//進位數 for(int i=1;i<=len1;++i) { ?????? flag=0;//注意每次清零 for(int j=1;j<=len2;++j) { c[i+j-1]+=a[i]*b[j]+flag; flag=c[i+j-1]/16; c[i+j-1]%=16; } c[i+len2]=flag; }//高精度相乘 int len3=len1+len2; while(c[len3]==0 && len3>1) len3--; for(int i=len3;i>=1;i--) { if(c[i]>=0 && c[i]<=9) cout< else cout<<(char)(c[i]-10+'A');? }//再把這個數轉為16進制 return 0; } 查找每一個答案即可 #include using namespace std; int n,m,a[100005],y; bool? check(int x) { int t = 0; for (int i = 1; i<= n; i++) { if (a[i]< t)//裝不完彈就掛了 return false; if (a[i]<= t + m)//裝完彈且在射程內 t += x; else { t += (a[i] - t - m);//裝完彈還不在射程內 t += x; } } return true; } int main() { cin>>n>>m; for (int i=1;i<=n;i++) cin>>a[i]; sort(a+1,a+n+1); int L=0,R=a[n]; while (L+1 { ?? int mid=(L+R)/2; ?? if (check(mid)) L=mid; ?? else R=mid; }//二分答案 cout< } 第四題:反向鏈表 #include const int X=1e5+5; using namespace std; int main(){ int Data[X],Next[X],list[X]; int FirstAdd,N,K; cin>>FirstAdd>>N>>K; for(int i=0;i { ?? int tmpAdd,tmpData,tmpNext; ?? cin>>tmpAdd>>tmpData>>tmpNext; ?? Data[tmpAdd] = tmpData; ?? Next[tmpAdd] = tmpNext; } int sum=0;?? // 累計有效結點數 while(FirstAdd!=-1) {?? // 當尾結點為 -1 時結束 ?? list[sum++] = FirstAdd;?? // 記錄所有Address ?? FirstAdd = Next[FirstAdd];? // 找下一個結點 } for(int i=0;i ){? // 每 K 個結點一個區(qū)間 ?? for(int j=0;j ?? {? // 反轉鏈表 ????????? int t = list[i+j]; ????????? list[i+j] = list[i+K-j-1]; ????????? list[i+K-j-1] = t; ?? } } for(int i=0;i ?? printf("%05d %d %05d\n",list[i],Data[list[i]],list[i+1]); printf("%05d %d -1\n",list[sum-1],Data[list[sum-1]]); return 0; } #include using namespace std; const double N=1e-7; double a,b,c,d,p,q; int T; double check(double l,double r) { double x1=a*r*r*r+b*r*r+c*r+d;//右邊界驗證 while(r-l>N) { ?? double mid=(r+l)/2; ?? double x2=a*mid*mid*mid+b*mid*mid+c*mid+d;//判斷中點 ?? if (x1*x2<0) l=mid;//兩點乘積小于零那么往右找 ?? else r=mid;//否則往左找 } } int main() { cin>>T; while(T--) { cin>>a>>b>>c>>d>>p>>q; ? double j1=((-2*b)-sqrt(4*b*b-12*a*c)) / (6*a);???? ? double j2=((-2*b)+sqrt(4*b*b-12*a*c)) / (6*a);??? //先求導然后就可以分出三個區(qū)間 ? if (j1>j2) swap(j1,j2);//確保區(qū)間區(qū)間是遞增的 ? printf("%.6lf %.6lf %.6lf",check(p,j1),check(j1,j2),check(j2,q));//分區(qū)間查找一下 }? } 看了學長的教學就會了 #include using namespace std; const int N=1005; vector bool vis[N]; int st,ed,sum,cnt[N],n,m,x,y; void dfs(int now) { if (now==ed)//走到終點 { ?? sum++; ?? for (int i=1;i<=n;i++) ?? if (vis[i]) cnt[i]++;//標記走過幾次 ?? return; } for (int i=0;i { ?? int to =G[now][i];//下一步 ?? if (!vis[to])//判斷沒走過 ?? { ????????? vis[to]=true;//標記為走過 ????????? dfs(to);//接著搜下一步 ????????? vis[to]=false;//再次標記為沒走過 ?? } } } int main() { cin>>n>>m; for (int i=1;i<=m;i++) { ?? cin>>x>>y; ?? G[x].push_back(y); ?? G[y].push_back(x);//無向圖基礎存圖 } cin>>st>>ed; vis[st]=true;//把起點標記為走過 dfs(st); int ans=0; for (int i=1;i<=n;i++) { ?? if (cnt[i]==sum) ans++; } ans=ans-2;//減去起點和終點 cout< return 0; } 這題知道反向dfs后就簡單了,連我都獨立搞定了 #include using namespace std; const int N=100005; int u,v,n,m,vis[N],ans[N]; vector void dfs(int x,int y) { if (vis[x]) return; ans[x]=y;//把第幾個點序號放入ans數組 vis[x]=true;//標記為走過 for (int i=0;i ?? ?dfs(G[x][i],y);//把第x行的圖搜一遍 } int main() { cin>>n>>m; for (int i=1;i<=m;i++) { ??? cin>>u>>v; ?? G[v].push_back(u); //反向存 }????? //有向圖基礎存圖 for (int i=n;i>=1;i--) dfs(i,i);//從后往前搜 for (int i=1;i<=n;i++) cout< return 0; } #include using namespace std; const int N = 10010; int n, m; vector bool vis[N]; int a[N],sum[3]; bool dfs(int now, int col) { vis[now] = true;//標記走過 a[now] = col; sum[col]++; for (int i = 0; i< g[now].size(); i++) ??{ int to = g[now][i];//下一步 if (vis[to] && a[to] == a[now]) return false;//相鄰了,不行 else if (!vis[to]) { if (!dfs(to, 3 - col)) ???? return false; } } return true; } int main() { cin>>n>>m; for (int i = 1; i<= m; i++) { int u, v; cin>>u>>v; g[u].push_back(v); g[v].push_back(u); }//存圖 int ans = 0; for (int i = 1; i<= n; i++) if (!vis[i])//沒走過 { ?sum[1] = sum[2] = 0; if (!dfs(i,1)) { ???? printf("Impossible"); ???? return 0; }//沒有符合條件的情況 ans += min(sum[1], sum[2]);//加上小的那個 } cout< return 0; } 你是否還在尋找穩(wěn)定的海外服務器提供商?創(chuàng)新互聯www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準確流量調度確保服務器高可用性,企業(yè)級服務器適合批量采購,新人活動首月15元起,快前往官網查看詳情吧
新聞標題:第一次雙周賽+基礎存圖-創(chuàng)新互聯
文章地址:http://weahome.cn/article/dpdico.html