A.不断增加时间,直到符合要求。

#include<bits/stdc++.h>
using namespace std; int a,b;
char c; int f(int x)
{
return x%*+x/;
} int main()
{
ios::sync_with_stdio();
cin >> a >> c >> b;
int ans = ;
while()
{
if(f(a) == b) break;
ans++;
b++;
if(b == )
{
b = ;
a++;
}
if(a == ) a = ;
}
cout << ans << endl;
return ;
}

B.两次前缀和。

#include<bits/stdc++.h>
using namespace std; int n,k,q,a[] = {},ans[] = {}; int main()
{
ios::sync_with_stdio();
cin >> n >> k >> q;
for(int i = ;i <= n;i++)
{
int x,y;
cin >> x >> y;
a[x]++;
a[y+]--;
}
for(int i = ;i <= ;i++) a[i] += a[i-];
for(int i = ;i <= ;i++)
{
ans[i] = ans[i-];
if(a[i] >= k) ans[i]++;
}
while(q--)
{
int x,y;
cin >> x >> y;
cout << ans[y]-ans[x-] << endl;
}
return ;
}

C.对于每一行,我们找当前最小的值,然后处理该行每一个值,每一个值减去最小值,若结果不为0,则该列处理这个值至0,最后判断是否每个点都为0。

注意n>m的时候,我们转置一下矩阵才能得到最小的答案。

#include<bits/stdc++.h>
using namespace std; int n,m,a[][],cnt1[] = {},cnt2[] = {}; int main()
{
ios::sync_with_stdio();
cin >> n >> m;
int flag = ;
if(n > m) flag = ;
if(flag)
{
for(int i = ;i <= n;i++)
{
for(int j = ;j <= m;j++) cin >> a[i][j];
}
}
else
{
swap(n,m);
for(int j = ;j <= m;j++)
{
for(int i = ;i <= n;i++) cin >> a[i][j];
}
}
for(int i = ;i <= n;i++)
{
int minn = ;
for(int j = ;j <= m;j++) minn = min(minn,a[i][j]);
for(int j = ;j <= m;j++)
{
if(a[i][j] != minn)
{
int t = a[i][j]-minn;
cnt2[j] += t;
for(int k = ;k <= n;k++) a[k][j] -= t;
}
a[i][j] -= minn;
}
cnt1[i] += minn;
}
int ok = ;
for(int i = ;i <= n;i++)
{
for(int j = ;j <= m;j++)
{
if(a[i][j] != ) ok = ;
}
}
if(!ok)
{
cout << - << endl;
return ;
}
int ans = ;
for(int i = ;i <= n;i++) ans += cnt1[i];
for(int i = ;i <= m;i++) ans += cnt2[i];
cout << ans << endl;
if(flag)
{
for(int i = ;i <= n;i++)
{
while(cnt1[i])
{
cnt1[i]--;
cout << "row " << i << endl;
}
}
for(int i = ;i <= m;i++)
{
while(cnt2[i])
{
cnt2[i]--;
cout << "col " << i << endl;
}
}
}
else
{
for(int i = ;i <= n;i++)
{
while(cnt1[i])
{
cnt1[i]--;
cout << "col " << i << endl;
}
}
for(int i = ;i <= m;i++)
{
while(cnt2[i])
{
cnt2[i]--;
cout << "row " << i << endl;
}
}
}
return ;
}

D.发现n是偶数的时候,会有规律,每隔两行会是前面的两个数相加,直接计算二项式的系数,最后一步的加减取决于n%4。

如果n是奇数,先模拟一行变成偶数。

#include<bits/stdc++.h>
#define MOD 1000000007
using namespace std; int n,a[];
long long fac[] = {}; long long qpow(long long a,long long b)
{
long long ans = ;
while(b)
{
if(b%) ans = ans*a%MOD;
a = a*a%MOD;
b /= ;
}
return ans;
}
int main()
{
ios::sync_with_stdio();
for(int i = ;i <= ;i++) fac[i] = fac[i-]*i%MOD;
cin >> n;
for(int i = ;i < n;i++) cin >> a[i];
if(n == )
{
cout << a[] << endl;
return ;
}
if(n%)
{
n--;
int now = ;
for(int i = ; i < n;i++)
{
if(now) a[i] = (a[i]+a[i+])%MOD;
else a[i] = (a[i]-a[i+]+MOD)%MOD;
now ^= ;
}
}
n = n/-;
long long ans1 = ,ans2 = ;
for(int i = ;i <= n;i++)
{
long long t = fac[n]*qpow(fac[i]*fac[n-i]%MOD,MOD-)%MOD;
ans1 = (ans1+t*a[i*]%MOD)%MOD;
ans2 = (ans2+t*a[i*+]%MOD)%MOD;
}
if(n%) cout << (ans1-ans2+MOD)%MOD << endl;
else cout << (ans1+ans2)%MOD << endl;
return ;
}

E.树形DP,dp[i][j][k]代表(当前在i点,买了j个商品,是否购买当前商品)的最少花费。

#include<bits/stdc++.h>
#define MOD 1000000007
using namespace std; int n,m,a[],b[],sz[] = {},ok[] = {};
long long dp[][][];
vector<int> v[]; void dfs(int now)
{
if(ok[now]) return;
dp[now][][] = ;
dp[now][][] = a[now];
dp[now][][] = b[now];
sz[now] = ;
for(int i = ;i < v[now].size();i++)
{
int t = v[now][i];
dfs(t);
for(int i = sz[now];i >= ;i--)
{
for(int j = sz[t];j >= ;j--)
{
dp[now][i+j][] = min(dp[now][i+j][],dp[now][i][]+dp[t][j][]);
dp[now][i+j][] = min(dp[now][i+j][],dp[now][i][]+min(dp[t][j][],dp[t][j][]));
}
}
sz[now] += sz[t];
}
ok[now] = ;
} int main()
{
ios::sync_with_stdio();
cin >> n >> m;
for(int i = ;i <= n;i++)
{
cin >> a[i] >> b[i];
b[i] = a[i]-b[i];
if(i > )
{
int x;
cin >> x;
v[x].push_back(i);
}
}
memset(dp,0x3f,sizeof(dp));
dfs();
for(int i = n;i >= ;i--)
{
if(dp[][i][] <= m || dp[][i][] <= m)
{
cout << i << endl;
return ;
}
}
return ;
}

Codeforces_816的更多相关文章

随机推荐

  1. 小小知识点(十四)——Adobe photoshop cc 2018中简单抠图的一些基本操作

    一 如何抠图 1. 右键弹出选择工具,随后鼠标左键选择快速选择工具 2.通过点击鼠标,选择想要的区域: Alt+鼠标右键  左右拖动鼠标可调整画笔大小 Alt+鼠标滑轮,可放大或缩小画布大小 ctrl ...

  2. c++数字和字符之间的转化

    关于C++中数与字符之间的转化 在c++中我们经常遇到需要把一个数变成字符,或者把字符变为一个数,c++中没有直接的转化函数,故我们需要自己去写函数去转化,这里我将介绍两种比较简单的方法: 法一: s ...

  3. 深入理解协程(三):async/await实现异步协程

    原创不易,转载请联系作者 深入理解协程分为三部分进行讲解: 协程的引入 yield from实现异步协程 async/await实现异步协程 本篇为深入理解协程系列文章的最后一篇. 从本篇你将了解到: ...

  4. 网络、TCP协议与UDP协议

    1.网络模型 (1)什么是网络模型 网络编程的本质是两个设备之间的数据交换,当然,在计算机网络中,设备主要指计算机.数据传递本身没有多大的难度,不就是把一个设备中的数据发送给两外一个设备,然后接受另外 ...

  5. 【 Tomcat 】tomcat8.0 基本参数调优配置-----(2)

    Tomcat 的缺省配置是不能稳定长期运行的,也就是不适合生产环境,它会死机,让你不断重新启动,甚至在午夜时分唤醒你.对于操作系统优化来说,是尽可能的增大可使用的内存容量.提高CPU 的频率,保证文件 ...

  6. org.springframework.core.type.classreading.ClassMetadataReadingVisitor 异常

    今天项目启动的时候发现了一个异常: Exception in thread "main" org.springframework.beans.factory.BeanDefinit ...

  7. Linux.vim.多行复制、删除、剪切

    复制: //单行复制+粘贴 yy + p:复制光标所处当前行, 敲p粘贴在光标处. //多行复制+粘贴 n + yy + p:复制光标所在行起以下n行(含当前行), 敲yy复制光标所处当前行, 敲p粘 ...

  8. Scrum.站立会议介绍

    项目任务分解完毕之后,整个项目要完成的任务也都已经确定,每个人负责的任务也确定.这时候就进入到每天的迭代过程.项目经理的一个职责就是每天负责召开 站立会议. 具体的形式如下: 每天固定时间召开. 项目 ...

  9. Linux下安装Ant

    前言 Apache Ant 是一个构建工具,可以将软件编译.测试.部署等步骤联系在一起完成自动化工作,比如可以利用Ant来执行Jmeter的 jmx 脚本,生成了 jtl 测试结果文件,接着再利用An ...

  10. [bzoj2815] [洛谷P2597] [ZJOI2012] 灾难

    Description 阿米巴是小强的好朋友. 阿米巴和小强在草原上捉蚂蚱.小强突然想,如果蚂蚱被他们捉灭绝了,那么吃蚂蚱的小鸟就会饿死,而捕食小鸟的猛禽也会跟着灭绝,从而引发一系列的生态灾难. 学过 ...