重慶分公司,新征程啟航
為企業提供網站建設、域名注冊、服務器等服務
為企業提供網站建設、域名注冊、服務器等服務
對于兩個數,先通分分母,再將分子乘上相應的倍數。
可通過__gcd(a,b)
求出a與b的大公因數,再用a*b/__gcd(a,b)
求出a與b的最小公倍數。
注意: 每兩個數運算完后,就要立刻化簡,否則過程數會超long long
;存在數字為0的情況,注意這時候的讀入和處理方式。
#includeusing namespace std;
typedef long long ll;
ll a[105],b[105];
int main(){int n;
cin>>n;
char c;
ll k=1;
ll sum=0;
cin>>a[1];
if (a[1]) cin>>c>>b[1];
else b[1]=1;
for (int i=2; i<=n; i++){cin>>a[i];
if (a[i]) cin>>c>>b[i];
else b[i]=1;
k=b[i]*b[i-1]/__gcd(b[i],b[i-1]);
ll r1=k/b[i-1];
a[i-1]*=r1;
ll r2=k/b[i];
a[i]*=r2;
a[i]=a[i]+a[i-1];
b[i]=k;
ll gcd=-1;
while (gcd!=1){ gcd=__gcd(a[i],b[i]);
a[i]/=gcd;
b[i]/=gcd;
}
}
sum=a[n];
k=b[n];
if (sum==0){cout<<0;
return 0;
}
if (sum%k==0){cout<gcd=__gcd(xiao,k);
xiao/=gcd;
k/=gcd;
}
cout<
由于PTA會卡空格,如果沒有if (sum%k==0)
的特殊輸出處理,則執行if (zheng) cout<
可定義c數組,記錄s2中某一個字符是否出現過即可。
#includeusing namespace std;
int c[100005];
int main(){string a,b,d;
getline(cin,a);
getline(cin,b);
int l=b.size();
for (int i=0; iif (!c[int(a[i])]){ d+=a[i];
}
}
cout<
2-3 L2-005 集合相似度
題目描述set
是一個內部自動有序且不含重復元素的容器,方便處理此題。對于兩個集合,可通過a集合中元素數量、b集合中元素數量和ab中交集元素數量,可直接求出ab的并集元素數量。
#includeusing namespace std;
const int maxn=55,maxm=1e4+5;
seta[maxm];
int n,m,k;
int main(){cin>>n;
for (int i=1; i<=n; i++){cin>>m;
for (int j=1; j<=m; j++){int tmp;
scanf("%d",&tmp);
a[i].insert(tmp);
}
}
cin>>k;
for (int l=1; l<=k; l++){int q,p;
scanf("%d%d",&q,&p);
int s=0,s1=a[q].size(),s2=a[p].size();
for (auto i=a[q].begin(); i!=a[q].end(); i++){if (a[p].find(*i)!=a[p].end()){s++;
}
}
printf("%.2lf%\n",double(s*100)/(s1+s2-s));
}
return 0;
}
set用法
參考題解
b為中序遍歷數組,c為后序遍歷數組。
對于每一次遞歸,參數 l1,l2,r1,r2 分別表示中序遍歷的左右端點和后序遍歷的左右端點。顯然,每次后序遍歷中,c[r2]即為該區間中的父節點,我們同時在b數組中找到父結點的下標,就可以通過b數組種 l1 和父節點坐標的差值算出左子樹中結點個數 lnum,同理可以得到右子樹中節點個數。這樣就可以將當前大區間拆分成左右子樹兩個區間了。doit(l1,l1+lnum-1,l2,l2+lnum-1);
doit(l1+lnum+1,r1,l2+lnum);
如果求先序遍歷,則在拆分區間前,將父節點push到a中。
如果求層序遍歷,則定義a為優先隊列,每次父節點push時,同時把該層的層數也push進即可。因為有些結點的層數會相等,我們同時再去定義nu
去記錄該節點是當前層數的第幾個。重載優先隊列運算符:return (a.w
#includeusing namespace std;
int n;
vectorb,c;
struct node{int v,w,nu;
bool operator<(const node a) const {return (a.wa;
void doit(int l1,int r1,int l2,int r2,int flo,int nu){if (l1>r1 || l2>r2) return;
a.push({c[r2],flo,nu});
// vector::iterator mid=find(b.begin(),b.end(),c[r]);
int lnum=find(b.begin(),b.end(),c[r2])-find(b.begin(),b.end(),b[l1]);
Floor[flo+1]++;
doit(l1,l1+lnum-1,l2,l2+lnum-1,flo+1,Floor[flo+1]);
Floor[flo+1]++;
doit(l1+lnum+1,r1,l2+lnum,r2-1,flo+1,Floor[flo+1]);
}
int main(){cin>>n;
for (int i=0; iint tmp;
scanf("%d",&tmp);
c.push_back(tmp);
}
for (int i=0; iint tmp;
scanf("%d",&tmp);
b.push_back(tmp);
}
Floor[1]=1;
doit(0,n-1,0,n-1,1,1);
while (!a.empty()){if (a.size()!=1) cout<
vector中如何查找元素的下標
查找vector元素下標
vector的find
并查集,每個人所記錄的父節點是當前集合中最小的編號數。用book
數組記錄當前的人,是否統計到了集合的總人數中,并且每次將所含的房子數和面積數累加到父節點中。
#includeusing namespace std;
const int maxn=1e4+1;
struct node{int a; //父節點編號
int f[3];
int s[6];
int s_num;
int num; //家庭人數
double cnt; //家庭房子數
double sum; //家庭房子面積
};
int n;
node a[maxn];
node ans[maxn],trans[maxn];
bool cmp(node i,node j){return ((i.sum/i.num)>(j.sum/j.num) || (i.sum/i.num==j.sum/j.num && i.aif (k==f[k]) return k;
return f[k]=find(f[k]);
}
void doit(int ID,int id){int f1,f2;
f1=find(ID);
f2=find(id);
if (f1==f2) return;
else if (f1>f2) f[f1]=f2;
else f[f2]=f1;
}
int main(){for (int i=1; i<=maxn; i++) f[i]=i;
cin>>n;
for (int i=1; i<=n; i++){int id;
cin>>id;
int ID;
for (int j=1; j<=2; j++){cin>>ID;
a[i].f[j]=ID;
if (ID==-1) continue;
doit(ID,id);
}
int k;
cin>>k;
a[i].s_num=k;
for (int j=1; j<=k; j++){cin>>ID;
a[i].s[j]=ID;
doit(ID,id);
}
a[i].a=id;
cin>>a[i].cnt>>a[i].sum;
}
for (int i=1; i<=n; i++){int fa=find(a[i].a);
int to;
to=a[i].a;
if (!book[to]){ans[fa].num++;
book[to]=1;
}
for (int j=1; j<=2; j++){to=a[i].f[j];
if (!book[to] && to!=-1){ans[fa].num++;
book[to]=1;
}
}
for (int j=1; j<=a[i].s_num; j++){to=a[i].s[j];
if (!book[to]){ans[fa].num++;
book[to]=1;
}
}
ans[fa].cnt+=a[i].cnt;
ans[fa].sum+=a[i].sum;
}
for (int i=0; i<=9999; i++)
ans[i].a=i;
int cntt=0;
for (int i=0; i<=9999; i++){if (ans[i].num) cntt++,trans[cntt]=ans[i];
}
cout<printf("%04d",trans[i].a);
cout<<" "<
你是否還在尋找穩定的海外服務器提供商?創新互聯www.cdcxhl.cn海外機房具備T級流量清洗系統配攻擊溯源,準確流量調度確保服務器高可用性,企業級服務器適合批量采購,新人活動首月15元起,快前往官網查看詳情吧