校內團隊訓練賽

2022-05-10 22:58:37 字數 2862 閱讀 2683

總結:菜。

傳送門題意:擲骰子,給長度為n的陣列指點數,每個被擲中概率為1/n,m個特殊骰子,擲中還能擲一次,求期望。

題解:水題,算出不能多擲的期望,與多擲一次的概率,聯立方程直接算出ans既可。

#includeusing namespace std;

int n,m,lin,ok[1007],ok2;

double a[1007],ans,c,c2;

int main()

} scanf("%d",&m);

for(int i=1;i<=m;i++)

if(n==m)

else

} for(int i=1;i<=n;i++)

c+=((double)1/(double)n*a[i]);

} printf("%.2f\n",c/(1.0-c2)); }

}

傳送門

題意:猜數,告訴你每位數之和與每位數平方之和求最小符合要求的數,答案位數大於100或找不到直接輸出no;

題解:答案大於100直接gg,這個好,那這個數最大就900,平方最大就8100(100個9)。直接想到dp預處理,dp[ i ] [ j ] 意思是當和為 i 時,平方和為 j 時最少需要幾位,dp[ i ] [ j ] = max( dp[ i ] [ j ] , dp[ i - p ] [ j - p * p ] + 1 ),其中 p 為 1 到 9 。再用 pre 陣列記錄最優情況由誰轉移既可。

#include#include#includeusing namespace std;

int dp[1007][10007],maxn=1000000007,s1,s2,t;

int pre[1007][10007];

vectorho;

int main()

} dp[0][0]=0;

for(int i=1;i<=1000;i++)

}else

}} }

scanf("%d",&t);

while(t--)

if(dp[s1][s2]>=maxn)

else

l=s1,r=s2;

while(sum--)

sort(ho.begin(),ho.end());

for(int i=0;i傳送門

題意:n個人,名字,最開始在某個地方,有多少錢,統計 m 天,人有 t 次換城市操作,t行,告訴你第幾天走,誰走了,去了哪(人移動後會把他的錢帶走),輸出每個城市的名字與其的錢大於其他城市的天數,天數為0的不輸出(城市的錢等於該城市人的錢的和)。

題解:單點修改線段樹水題,或用map模擬。

#include#include#include#includeusing namespace std;

#define ll long long

struct homurama[200007];

stack>sa;

struct madokaex[50007];

bool cmp(madoka a1,madoka a2)

int mid=(l+r)/2;

build(l,mid,k*2);

build(mid+1,r,k*2+1);

if(ma[k*2+1].max1>ma[k*2].max1)

else

ll minn=min(ma[k*2+1].max1,ma[k*2].max1);

ll maxn=max(ma[k*2].max2,ma[k*2+1].max2);

ma[k].max2=max(minn,maxn);

}void getall(int k)

getall(k*2);

getall(k*2+1);

}void change(int k,int p,ll money)

int mid=(ma[k].l+ma[k].r)/2;

if(p<=mid)

else

if(ma[k*2+1].max1>ma[k*2].max1)

else

ll minn=min(ma[k*2+1].max1,ma[k*2].max1);

ll maxn=max(ma[k*2].max2,ma[k*2+1].max2);

ma[k].max2=max(minn,maxn);

}int main()

a[di[s2]]+=lin;

pw[cntp]=di[s2];

} scanf("%d%d",&m,&t);

for(int i=1;i<=t;i++)

ex[i].d=di[s2];

} sort(ex+1,ex+1+t,cmp);

build(1,cntd,1);

int head=1;

for(int i=1;i<=m;i++)

for(int j=head;j<=t;j++)

else

} }map::reverse_iterator iter;

for(iter = di.rbegin(); iter != di.rend(); iter++));

} }

while(!sa.empty())

int main()

dp[a[1]]=0;

pos[a[1]]=1;

for(int i=2;i<=n;i++)

} int p = pos[a[n]];

while(p!=0)

printf("%d",sa.top());

sa.pop();

while(!sa.empty())

puts("");

} return 0;

}

校內團隊訓練賽2

總結 太慘了,卡水題卡兩小時,直接飛了。題目如下 傳送門 題意 給n表示陣列長度,m個關係,每個關係兩個索引,表示這兩個索引之間的值必須滿足大於或小於關係。然後構造兩個陣列,第乙個陣列是1到n的排列,第二個陣列至少有一對數值相等,兩個陣列都要滿足所有關係,能構造輸出方案,不能輸出no。分析 主要還是...

訓練 9 13 訓練賽

a.hdu 6230 乙個合法的子串 s 3n 2 滿足條件即1 2n 1 為以n為回文中心的回文串,n 3n 2為以2n 1為中心的回文串。故我們可以通過尋找回文中心對,來判斷相應合法子串的個數。利用manacher求出每個位置的最長回文半徑,則若i,j滿足條件 i j 則應有 p i geqsl...

訓練賽 詠歎

安師大附中訓練題目 給定乙個1到n的排列a,對其進行氣泡排序 counter 0 while a不是公升序的 counter counter 1 for i 1 to n 1 if a i a i 1 then swap a i a i 1 endifend forend while那麼經過幾輪排序...