Codeforces_816
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的更多相关文章
随机推荐
- .Net Core 认证系统之基于Identity Server4 Token的JwtToken认证源码解析
介绍JwtToken认证之前,必须要掌握.Net Core认证系统的核心原理,如果你还不了解,请参考.Net Core 认证组件源码解析,且必须对jwt有基本的了解,如果不知道,请百度.最重要的是你还 ...
- SpringBoot 2.X整合Mybatis
1.创建工程环境 勾选Web.Mybatis.MySQL,如下 依赖如下 <dependency> <groupId>org.springframework.boot</ ...
- .Net PE
// ConsoleApplication26.cpp: 定义控制台应用程序的入口点. // #include "stdafx.h" #include <Windows.h& ...
- java动态代理、Proxy与InvocationHandler
看了好多关于代理的文章,理解和整理一下. 1.代理的基本构成 抽象角色:声明真实对象和代理对象的共同接口,这样可在任何使用真实对象的地方都可以使用代理对象. 代理角色:代理对象内部含有真实对象的引用, ...
- css label两端对齐
上面这种效果很常见,实现的代码如下: html部分 <ul> <li class="detail_item"> <span class="d ...
- Spring中常见的设计模式——适配器模式
一.适配器模式的应用场景 适配器模式(Adapter Pattern)是指将一个类的接口转换成用户期待的另一个接口,使原本接口不兼容的类可以一起工作,属于构造设计模式. 适配器适用于以下几种业务场景: ...
- RabbitMQ入门之Hello World
RabbitMQ简介 在介绍RabbitMQ之前,我们需要了解一些最基础的概念,相信使用过或者听说过RabbitMQ的人都不会陌生,但笔者还是不厌其烦地在这里讲述,因为笔者的理念是self con ...
- Scala实践14
1.Scala的future 创建future import scala.concurrent._ import ExecutionContext.Implicits.global object Fu ...
- Spring Boot2 系列教程 (十七) | 整合 WebSocket 实现聊天室
微信公众号:一个优秀的废人.如有问题,请后台留言,反正我也不会听. 前言 昨天那篇介绍了 WebSocket 实现广播,也即服务器端有消息时,将消息发送给所有连接了当前 endpoint 的浏览器.但 ...
- Unity_Dungeonize 随机生成迷宫
本文对随机生成迷宫的实现思路进行记录,其作用在于为游戏过程提供随机性以及节省开发周期,下面是Dungeonize的结构 随机迷宫的生成主要包括几个阶段 1.生成房间体结构,为墙体,自定义房间,自定义物 ...