牛客网NOIP赛前集训营-普及组(第二场)和 牛客网NOIP赛前集训营-提高组(第二场)解题报告
牛客网NOIP赛前集训营-普及组(第二场)
题目链接:https://www.nowcoder.com/acm/contest/165#question
A 你好诶加币
设最大值为maxx,最小值为minn
分三种情况:
\(1.a > 0 且b > 0\)
会加爆long long,所以化简式子
\(maxx - a >= b\)
\(2.a < 0 且b < 0\)
会加爆long long,所以化简式子
\(minn - b <= a\)
\(3.剩下的情况\)
直接输出yes
CODE
#include <iostream>
#include <cstdio>
#define ll long long
ll maxx = 9223372036854775807,minn = -9223372036854775808;
bool calc(ll a,ll b) {
if(a > 0 && b > 0) {
if(maxx - b < a) return false;
return true;
}
if(a < 0 && b < 0)
if(minn - b <= a) return false;
return true;
}
return true;
}
int main() {
std::cin >> a >> b;
if(calc(a,b)) {
std::cout << a + b;
}
else puts("\"hello, %lld\\n\"");
return 0;
}
B 最后一次
直接从n往低处枚举\(\sqrt{i}\)判断素数即可.
因为素数的密度大概在\(1 / ln n\)
所以期望\(logn\)左右.
所以不会超时.
CODE
#include <iostream>
#include <cstdio>
#include <cmath>
#define ll long long
bool calc(ll x) {
ll q = sqrt(x);
for(int i = 2;i <= q;++ i) {
if(x % i == 0) return false;
}
return true;
}
int main() {
ll n;
std::cin >> n;
for(ll i = n;i >= 2;-- i) {
if(calc(i)) {
std::cout << i;
return 0;
}
}
return 0;
}
C 选择颜色
结论题吧,即使在考试中看出组合+奇偶讨论一下,但是当时时间不够..
日后再做也还是不会做.
直接放结论吧.
\((c-1)^n +(c-1)*-1^n\)
当然也可反向推递推式.
\(f(n)=(c-2)*f(n-1) + (c-1)*f(n-2)\)
这个博主讲解的非常好,不过式子有问题,正确的式子应该是上面这个.
然后用矩阵快速幂求.
CODE
#include<cstdio>
#include<iostream>
using namespace std;
int fastpow(int a, int p,int mod)
{
int base = 1;
while(p)
{
if(p & 1)base = (base * a) % mod;
a = (a * a) % mod; p >>= 1;
}
return base;
}
int main()
{
int n,c,p;
cin >> n >> c;
p = 10007;
int ans;
cout << fastpow(c - 1, n, p) + (c - 1) * fastpow(-1, n, p);
return 0;
}
D 合法括号序列
DP,暂时不想做.放到以后做.
牛客网NOIP赛前集训营-提高组(第二场)
题目链接:https://www.nowcoder.com/acm/contest/173#question
A 方差
化简式子,不能出现除的形式,不然会有精度问题.
\]
\]
\]
拆开.
\]
设\(sum\)为\(b_1+b_2+...b_m\)
折\(sum2\)为\({b_1}^2 + {b_2}^2 + {b_3}^2 + ...{b_m}^2\)
则\(\overline{b} = \dfrac{sum}{m}\)
带入
\(m * sum2 - 2 * sum^2+ sum^2\)
\(m * sum2 - sum ^ 2\)
其中先算出\(sum = b_1+b_2+....b_n\)
然后直接减去那个值就好.
sum2同理
那么时间复杂度就是\(O(n)\)的
#include <iostream>
#include <cstdio>
#define ll long long
const int maxN = 1e5 + 7;
int n;
ll a[maxN];
ll sum1,sum2;
inline ll read() {
ll x = 0,f = 1;char c = getchar();
while(c < '0' || c > '9') {if(c == '-')f = -1;c = getchar();}
while(c >= '0' && c <= '9') {x = x * 10 + c - '0';c = getchar();}
return x * f;
}
int main() {
scanf("%d",&n);
int m = n - 1;
for(int i = 1;i <= n;++ i)
a[i] = read();
for(int i = 1;i <= n;++ i) {
sum1 += a[i];
sum2 += a[i] * a[i];
}
for(int i = 1;i < n;++ i)
printf("%lld ", (ll)m * (sum2 - a[i] * a[i]) - (sum1 - a[i]) * (sum1 - a[i]));
printf("%lld\n", (ll)m * (sum2 - a[n] * a[n]) - (sum1 - a[n]) * (sum1 - a[n]));
}
B 分糖果
不会,但是部分分就是,当所有的\(a_i\)相等时,就成了PJ组的C题.
\(n≤4\)直接dfs.
\(n <= 100, a_i <= 20\)
\(n <= 100, a_i <= 100\)
这部分数据就是DP.
我不会.
放20分的吧.
#include <iostream>
#include <cstdio>
#define ll long long
using namespace std;
const int mod = 1e9 + 7;
const int maxN = 1e6 + 7;
int n;
int a[maxN];
int b[maxN];
int cnt;
inline int read() {
int x = 0,f = 1;char c = getchar();
while(c < '0' || c > '9') {if(c == '-') f = -1;c = getchar();}
while(c >= '0' && c <= '9') {x = x * 10 + c - '0';c = getchar();}
return x * f;
}
ll power(ll a,int b)
{
ll ans = 1;
for(ll now = a;b;b >>= 1,now = now * now % mod) {
if(b & 1) ans = ans * now % mod;
}
return ans % mod;
}
void dfs(int now) {
if(now == n + 1) {
if(b[1] != b[n]) cnt ++;
return;
}
for(int i = 1;i <= a[now];++ i) {
b[now] = i;
if(b[now] != b[now - 1])
dfs(now + 1);
}
return ;
}
int main()
{
scanf("%d",&n);
for(int i = 1;i <= n;++ i) {
a[i] = read();
}
dfs(1);
cout << cnt;
return 0;
}
C 集合划分
神仙题目,弃疗.
牛客网NOIP赛前集训营-普及组(第二场)和 牛客网NOIP赛前集训营-提高组(第二场)解题报告的更多相关文章
- 牛客网NOIP赛前集训营-提高组(第四场)游记
牛客网NOIP赛前集训营-提高组(第四场)游记 动态点分治 题目大意: \(T(t\le10000)\)组询问,求\([l,r]\)中\(k(l,r,k<2^{63})\)的非负整数次幂的数的个 ...
- 牛客网NOIP赛前集训营-提高组(第四场)B区间
牛客网NOIP赛前集训营-提高组(第四场)B区间 题目描述 给出一个序列$ a_1 \dots a_n$. 定义一个区间 \([l,r]\) 是好的,当且仅当这个区间中存在一个 \(i\),使得 ...
- 牛客网NOIP赛前集训营-提高组(第四场)B题 区间
牛客网NOIP赛前集训营-提高组(第四场) 题目描述 给出一个序列 a1, ..., an. 定义一个区间 [l,r] 是好的,当且仅当这个区间中存在一个 i,使得 ai 恰好等于 al, al+1, ...
- 牛客网CSP-S提高组赛前集训营Round4
牛客网CSP-S提高组赛前集训营 标签(空格分隔): 题解 算法 模拟赛 题目 描述 做法 \(BSOJ6377\) 求由\(n\)长度的数组复制\(k\)次的数组里每个连续子序列出现数字种类的和 对 ...
- 牛客CSP-S提高组赛前集训营1
牛客CSP-S提高组赛前集训营1 比赛链接 官方题解 before:T1观察+结论题,T2树形Dp,可以换根或up&down,T3正解妙,转化为图上问题.题目质量不错,但数据太水了~. A-仓 ...
- 牛客NOIP暑期七天营-提高组5+普及组5
————提高组———— 第一题:deco的abs 题目链接:https://ac.nowcoder.com/acm/contest/934/A 因为每个数都可以加任意次 d ,所以可以推出 0 < ...
- 牛客NOIP暑期七天营-提高组1
牛客NOIP暑期七天营-提高组1 链接 A 边权可为0就排序建一条链子. 但是边权不为0 除了第一个有0的不行. x连向上一个比他小的数. 期间判断有无解. #include <bits/std ...
- 18/9/16牛客网提高组Day2
牛客网提高组Day2 T1 方差 第一眼看就知道要打暴力啊,然而并没有想到去化简式子... 可能因为昨晚没睡好,今天上午困死 导致暴力打了一个半小时,还不对... #include <algor ...
- 18/9/9牛客网提高组Day1
牛客网提高组Day1 T1 中位数 这好像是主席树??听说过,不会啊... 最后只打了个暴力,可能是n2logn? 只过了前30% qwq #include<algorithm> #in ...
随机推荐
- RPC入门
在校期间大家都写过不少程序,比如写个hello world服务类,然后本地调用下,如下所示.这些程序的特点是服务消费方和服务提供方是本地调用关系. 而一旦踏入公司尤其是大型互联网公司就会发现,公司的系 ...
- hdu 2108 Shape of HDU(判定是不是凸多边形)
#include <iostream> #include <algorithm> #include <cstring> #include <cstdio> ...
- [题解](gcd/lcm)luogu_P1072_Hankson的趣味题(NOIP2009)
连续三次不开longlong导致wa!!! 不开longlong一时爽,一会提交火葬场!!! OI千万条,longlong第一条 乘法不longlong,提交两行泪 暴力luogu就能过了???打好暴 ...
- 梳理一下我理解的aop
在看了很多网上的资料和记录之后,我大概捋了下SpringAOP的各种阶段: 基本的advice编程,利用ProxyFactory拿代理类 利用spring把ProxyFactory,advice等be ...
- 089 Gray Code 格雷编码
格雷编码是一个二进制数字系统,在该系统中,两个连续的数值仅有一个位数的差异.给定一个代表编码总位数的非负整数 n,打印格雷码序列.格雷码序列必须以0开头.例如, 给定 n = 2, 返回 [0,1,3 ...
- 本机运行x程序出现:Can't open display 原因及其解决方法(貌似非永久)
http://blog.sina.com.cn/s/blog_53db572501016ma7.html 这是因为Xserver默认情况下不允许别的用户的图形程序的图形显示在当前屏幕上. 如果需要别的 ...
- kafka java api生产者
import java.util.HashMap; import java.util.List;import java.util.Map;import java.util.Properties; im ...
- Java生成-zipf分布的数据集(自定义倾斜度,用作spark data skew测试)
1.代码 import java.io.Serializable; import java.util.NavigableMap; import java.util.Random; import jav ...
- SVN提交文件冲突怎么办?
SVN文件遇到冲突怎么解决: 1. 文件出现这个图标提示后,你先把这个文件备份,备份到其他目录. 2. 把SVN目录下的这个文件还原为服务器上的最新版本或者直接删除重新更新到最新版本. 3. 把你备份 ...
- 更改IDEA默认使用JDK1.5编译项目
在使用IDEA编译项目时,总是提示我编译失败,有些功能是在1.5之后的版本才支持.废了好大的功夫才编译成功.下面呢,就是更改编译的过程了! 一.初步更改 使用快捷键Ctrl+Alt+Shift+S打开 ...