Codeforces_839
阅读原文时间:2023年07月14日阅读:1

A.每天更新判断。

#include
using namespace std;

int n,k,a[];

int main()
{
ios::sync_with_stdio();
cin >> n >> k;
for(int i = ;i <= n;i++) cin >> a[i];
int ans = ,now = ;
for(int i = ;i <= n;i++) { now += a[i]; if(now > )
{
now -= ;
ans += ;
}
else
{
ans += now;
now = ;
}
if(ans >= k)
{
cout << i << endl;
return ;
}
}
cout << - << endl;
return ;
}


B.先贪心把4个位置的坐满,然后贪心两个的位置(加上4个位置剩余组数),最后剩余的座位仅能单人,为前两次贪心剩余组数和。

#include
using namespace std;

int n,k,a[];

int main()
{
ios::sync_with_stdio();
cin >> n >> k;
for(int i = ;i <= k;i++) cin >> a[i];
int cnt4 = n;
for(int i = ;i <= k;i++) { while(a[i] >= && cnt4)
{
a[i] -= ;
cnt4--;
}
}
int cnt2 = cnt4+*n;
for(int i = ;i <= k;i++) { while(a[i] >= && cnt2)
{
a[i] -= ;
cnt2--;
}
}
int cnt1 = cnt2+cnt4;
for(int i = ;i <= k;i++) cnt1 -= a[i]; if(cnt1 >= ) cout << "YES" << endl;
else cout << "NO" << endl;
return ;
}


C.dfs,每点的权值为儿子节点权值的平均值+1。

#include
using namespace std;

int n;
vector v[];

double dfs(int now,int pre)
{
double ans = ;
int sz = v[now].size();
if(now != ) sz--;
for(int i = ;i < v[now].size();i++)
{
int t = v[now][i];
if(t == pre) continue;
ans += dfs(t,now)/sz;
}
return ans;
}

int main()
{
ios::sync_with_stdio();
cin >> n;
for(int i = ;i < n;i++) { int x,y; cin >> x >> y;
v[x].push_back(y);
v[y].push_back(x);
}
cout << fixed << setprecision() << dfs(,)- << endl;
return ;
}


D.首先,对于x个数,都含有某个因子,那么他们被统计的次数为1C(x,1)+2C(x,2)+…+xC(x,x),可推得结果为x*2^(x-1)。

但事实上,某些数因子会被比它的因子替代,我们按因子从大到小容斥。

#include
#define MOD 1000000007
using namespace std;

int n;
long long two[],cnt[] = {},dp[];

int main()
{
ios::sync_with_stdio();
two[] = ;
for(int i = ;i <= ;i++) two[i] = two[i-]*%MOD; cin >> n;
int maxx = ;
for(int i = ;i <= n;i++) { int x; cin >> x;
cnt[x]++;
maxx = max(maxx,x);
}
long long ans = ;
for(int i = maxx;i > ;i--)
{
long long t = ;
for(int j = i;j <= maxx;j += i) t += cnt[j];
if(t == ) continue;
dp[i] = t*two[t-]%MOD;
for(int j = *i;j <= maxx;j += i) dp[i] = (dp[i]-dp[j]+MOD)%MOD;
ans = (ans+dp[i]*i)%MOD;
}
cout << ans << endl;
return ;
}