[NOIP2014D1]
T1
Problem
Solution
一道非常裸的模拟题。直接枚举每次猜拳就可以了。
Code
#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
#define ll long long
int x[205], y[205];
ll read()
{
ll ans = 0; int zf = 1; char ch;
while (ch != '-' && (ch < '0' || ch > '9')) ch = getchar();
if (ch == '-') zf = -1, ch = getchar();
while (ch >= '0' && ch <= '9') ans = ans * 10 + ch - '0', ch = getchar();
return ans * zf;
}
int check(int X, int Y)
{
if (X == Y) return 0;
if (X == 0)
if (Y == 2 || Y == 3) return 1;
else return -1;
if (X == 1)
if (Y == 0 || Y == 3) return 1;
else return -1;
if (X == 2)
if (Y == 1 || Y == 4) return 1;
else return -1;
if (X == 3)
if (Y == 2 || Y == 4) return 1;
else return -1;
if (X == 4)
if (Y == 0 || Y == 1) return 1;
else return -1;
}
int main()
{
int n = read(), XX = read(), YY = read();
for (int i = 0; i < XX; i++) x[i] = read();
for (int i = 0; i < YY; i++) y[i] = read();
int ansx = 0, ansy = 0;
for (int time = 0; time < n; time++)
{
int X = x[time % XX], Y = y[time %YY];
if (check(X, Y) == 1) ansx++;
else if (check(X, Y) == -1) ansy++;
}
printf("%d %d\n", ansx, ansy);
}
T2
Problem
Solution
这题其实只要枚举每个点,选它的两条边构成一对,记录max和sum。
求sum注意一下用前缀和优化就好了,求max只需算每个点连着的点中最大的两个点相乘的最大值。
Code
#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
#define ll long long
ll read()
{
ll ans = 0; int zf = 1; char ch;
while (ch != '-' && (ch < '0' || ch > '9')) ch = getchar();
if (ch == '-') zf = -1, ch = getchar();
while (ch >= '0' && ch <= '9') ans = ans * 10 + ch - '0', ch = getchar();
return ans * zf;
}
int vet[400005], head[200005], nextx[400005];
ll w[200005], num = 0;
const ll mo = 10007;
void add(int u, int v)
{
vet[++num] = v;
nextx[num] = head[u];
head[u] = num;
}
int main()
{
int n = read();
for (int i = 1; i < n; i++)
{
int u = read(), v = read();
add(u, v);
add(v, u);
}
for (int i = 1; i <= n; i++) w[i] = read();
ll ans = 0, maxX = 0;
for (int u = 1; u <= n; u++)
{
ll First = 0, Second = 0, sum = 0;
for (int i = head[u]; i; i = nextx[i])
{
int v = vet[i];
if (w[v] > First)
{
Second = First;
First = w[v];
}
else if (w[v] > Second) Second = w[v];
ans = (ans + 2 * sum * w[v]) % mo;
maxX = max(maxX, First * Second);
sum += w[v];
}
}
printf("%lld %lld\n", maxX, ans);
}
[NOIP2014D1]的更多相关文章
随机推荐
- markdown test2
#home { width: auto; margin: 0 80px 0 0; } mkdir test. #include <msxml6.h> // 含有 MSXML最新版 #inc ...
- 面向复杂应用,Node.js中的IoC容器 -- Rockerjs/core
Rockerjs Core 项目地址 项目主页 基于 TypeScript 和注解的轻量级IoC容器,提供了依赖注入.面向切面编程及异常处理等功能.Rockerjs Core可在任意工程中引入,是一个 ...
- oracle 结果集合并
SELECT case ' then ()) FROM T_UEP_DB_UNION A ' ' start with A.UNION_CODE = U.UNION_CODE CONNECT BY P ...
- CentOS中使用tcpdump抓包
安装: yum install tcpdump 命令使用: 监听特定网卡 tcpdump 抓取第一块网卡所有数据包 [root@server110 tcpdump]# tcpdump tcpdump: ...
- Oracle update语句更新值来自另一张表中的数据
task 任务表 role 角色表 两表之间必须有关联的字段 update task t set t.roleName = ( select r.name from role r where r.id ...
- js打印html指定元素,解决动态获取的图片无法打印问题
用js来调用浏览器的打印接口很容易,一两行代码就能搞定,但是有些数据是通过动态生成的,例如一些动态生成的二维码,有时候调用打印接口图片会无法显示 为了解决这个问题,建议使用下面这个库 下载:https ...
- flex 垂直居中、两列对齐、自适应宽
flex 垂直居中 <div id="parent"> <div id="child"> </div> </div&g ...
- python基础之虚拟环境--常用指令
虚拟环境的介绍和应用就不在这里赘述了,做个快捷的记录 这是官方给出来的解释了https://docs.python.org/zh-cn/3.7/tutorial/venv.html 还看到有的人,还安 ...
- Hadoop分布式文件系统HDFS的工作原理
Hadoop分布式文件系统(HDFS)是一种被设计成适合运行在通用硬件上的分布式文件系统.HDFS是一个高度容错性的系统,适合部署在廉价的机器上.它能提供高吞吐量的数据访问,非常适合大规模数据集上的应 ...
- HTML标记
html:超文本标记语言 标记,标签,元素 单标签:<标签名 属性名="属性值" 属性名=“属性值” /> 双标签:<标签名 属性名="属性值” 属 ...