牛客OI赛制测试赛2(0906)
牛客OI赛制测试赛2(0906)
A :无序组数
题目描述
给出一个二元组(A,B)
求出无序二元组(a,b) 使得(a|A,b|B)的组数
无序意思就是(a,b)和(b,a) 算一组.
输入描述:
第一行数据组数 T(1≤T≤10000)
接下来T行,每行两个正整数 A,B(1≤A,B≤10000)
输出描述:
共T行,每行一个结果
输入
1
4 6
输出
11
说明
样例解释:
二元组如下:
(1,1)(1,2)(1,3)(1,6)
(2,1)(2,2)(2,3)(2,6)
(4,1)(4,2)(4,3)(4,6)
共12组.
无序二元组如下:
(1,1)(1,2)(1,3)(1,6)
(2,2)(2,3)(2,6)
(4,1)(4,2)(4,3)(4,6)
共11组
分析
给出A的所有因数 和B的所有因数 组成的无序二元组数。无序的意思见题。
由题意可知,可以产生无序二元组的情况只可能是A和B的公因数,而他们的公因数个数可以由最大公因数
gcd(A,B)
的因数个数得出,所以我们先打表得出 1~100000 的因数个数。然后由于是产生无序二元组,也就是说,从gcd(A,B)
的因数个数 n 中取两个数进行组合,也就是排列组合问题。直接 D = n*(n-1)/2即可得出。但是要注意,排列组合中不包括两两数字相同的组合,所以答案应该再加上n。总的来说,如果A的因数个数a,B的因数个数b,那么由
a*b
是总结果,但是其中重复了D组,所以减去即可。但是如果正的来看D+C+a*(b-C)+(a-C)*C
可以直接得出结果。
#include<cstdio>
#include<cstring>
int Gcd(int a,int b)
{
int temp;
while(b)
{
temp=a%b;
a=b;
b=temp;
}
return a;
}
int a[10000005];
int T;
int A,B,C,D;
int main()
{
scanf("%d",&T);
for(int i=1;i<=100000;i++)
for(int j=1;i*j<=100000;j++)
a[i*j]++;
while(T--)
{
scanf("%d%d",&A,&B);
C=a[Gcd(A,B)];
D=C*(C-1)/2;
printf("%d\n",a[A]*a[B]-D);
//D+C+a[A]*(a[B]-C)+(a[A]-C)*C也是可以的。
}
return 0;
}
B:路径数量
题目描述
给出一个 n * n 的邻接矩阵A.
A是一个01矩阵 .
A[i][j]=1表示i号点和j号点之间有长度为1的边直接相连.
求出从 1 号点 到 n 号点长度为k的路径的数目.
输入描述:
第1行两个数n,k (20 ≤n ≤ 30,1 ≤ k ≤ 10)
第2行至第n+1行,为一个邻接矩阵
输出描述:
题目中所求的数目
输入
4 2
0 1 1 0
1 0 0 1
1 0 0 1
0 1 1 0
输出
2
说明
样例如图:
第一条路径:1-2-4
第二条路径:1-3-4
分析
- 第一眼看到以为是深搜,但是n最大是30,而对于每一层,最多有30个方向,所以很有可能超时(只能过50%)
- 如果要求 1~n 号的路径长度为K的路径个数,那我们可以换个方向想,由于路径是必须连续的,如果设
dp[N][N]
,代表到达第j个点长度为k的路径数量。我们可以让路径长度k从1开始,递增到K,而对于每一个k,都由之前的 k-1 得出,最终可以得到·dp[n][k]
即为答案。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#define MAX_N 3500
int N,K;
long long G[MAX_N][MAX_N];
long long dp[MAX_N][MAX_N];
int main(){
scanf("%d%d",&N,&K);
for(int i=1;i<=N;i++)
{
for(int j=1;j<=N;j++)
{
scanf("%lld",&G[i][j]);
}
}
dp[1][0]=1;
for(int k=1;k<=K;k++)
{
for(int i=1;i<=N;i++)
{
for(int j=1;j<=N;j++)
{
if(G[i][j])
dp[j][k]+=dp[i][k-1];
}
}
}
cout<<dp[N][K];
return 0;
}
C:数列下标
题目描述
给出一个数列 A,求出一个数列B.
其中Bi 表示 数列A中 Ai 右边第一个比 Ai 大的数的下标(从1开始计数),没有找到这一个下标 Bi 就为0
输出数列B
输入描述:
第一行1个数字 n (n ≤ 10000)
第二行n个数字第 i 个数字为 Ai (0 ≤ Ai ≤ 1000000000)
输出描述:
一共一行,第 i 个数和第 i+1 个数中间用空格隔开.
输入
6
3 2 6 1 1 2
输出
3 3 0 6 6 0
分析
没毛病直接暴力
int a[100001],b[100001];
int n;
int main()
{
while(cin>>n)
{
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
}
bool flag = 0;
for(int i=1;i<=n;i++)
{
flag = 0;
for(int j=i+1;j<=n;j++)
{
if(a[i]<a[j])
{
b[i] = j,flag = 1;
break;
}
}
if(!flag)
b[i] = 0;
}
printf("%d",b[1]);
for(int i=2;i<=n;i++)
printf(" %d",b[i]);
cout<<endl;
}
return 0;
}
D:星光晚餐
题目描述
Johnson和Nancy要在星光下吃晚餐。这是一件很浪漫的事情。
为了增加星光晚餐那浪漫的氛围,他拿出了一个神奇的魔法棒,并且可以按照一定的规则,改变天上星星的亮暗。
Johnson想考考Nancy,在他挥动魔法棒后,会有多少颗星星依旧闪耀在天空。他知道,Nancy一定会一口说出答案。
Nancy当然知道怎么做啦,但她想考考你!
Johnson先将天上n个星星排成一排,起初它们都是暗的。
他告诉他的妹子,他将挥动n次魔法棒,第i次挥动会将编号为i的正整数倍的星星的亮暗反转,即亮的星星转暗,暗的星星转亮。
Johnson想问Nancy,最终会有多少个星星依旧闪亮在天空。
输入描述:
一个整数n,含义请见题目描述。
输出描述:
一个整数ans,即n次操作后会有多少个星星依旧闪亮。
输入
3
输出
1
输入
7
输出
2
分析
- 一个星星是否亮取决于它的因数个数是否为奇数。
- 而一个数的因数个数是否为因数只取决于它是不是完全平方数。
long long ans;
long long n;
int main()
{
while(cin>>n)
{
cout<<(long long)sqrt(n)<<endl;
}
return 0;
}
E:括号序列
题目描述
给定括号长度N,给出一串括号(只包含小括号),计算出最少的交换(两两交换)次数,使整个括号序列匹配。 我们认为一个括号匹配,即对任意一个')',在其左侧都有一个'('与它匹配,且他们形成一一映射关系。
输入描述:
第一行:整数N,表示括号序列长度
第二行:一个字符串,表示括号
输出描述:
一个整数,表示最少的交换次数
输入
复制
6
(()))(
输出
1
输入
6
)))(((
输出
2
分析
- 贪心,对于每一个右括号,都要保证有一个左括号,所以用一个now来储存现在左括号的个数,如果now为0,就拿最右边的左括号来交换就ok。因为要时刻保存最右边的左括号的位置,可以用一个栈来储存。
#define MAX 5000005
char s[MAX];
int n;
stack<int> st;
int main()
{
while(cin>>n)
{
cin>>s;
while(!st.empty())
st.pop();
for(int i=0;i<n;i++)
if(s[i]=='(')st.push(i);
int now=0,ans = 0,index;
for(int i=0;i<n;i++)
{
if(s[i]=='(')now++;
else
{
if(now>0)now--;
else
{
now++;
ans++;
index = st.top();st.pop();
swap(s[i],s[index]);
}
}
}
cout<<ans<<endl;
}
return 0;
}
F:假的数字游戏
稍后呈上。
牛客OI赛制测试赛2(0906)的更多相关文章
- 【牛客OI赛制测试赛3】 毒瘤xor
牛客OI赛制测试赛3 毒瘤xor 传送门 题面,水表者自重 Solution 前缀和简单题(挖坑待补) 代码实现 #include<stdio.h> #define int long lo ...
- 牛客OI赛制测试赛2
A题: https://www.nowcoder.com/acm/contest/185/A 链接:https://www.nowcoder.com/acm/contest/185/A来源:牛客网 题 ...
- 8.30 牛客OI赛制测试赛1 F题 子序列
题目描述 给出一个长度为n的序列,你需要计算出所有长度为k的子序列中,除最大最小数之外所有数的乘积相乘的结果 输入描述: 第一行一个整数T,表示数据组数.对于每组数据,第一行两个整数N,k,含义如题所 ...
- C数列下标 牛客OI赛制测试赛2
链接:https://www.nowcoder.com/acm/contest/185/C来源:牛客网 给出一个数列 A,求出一个数列B. 其中Bi 表示 数列A中 Ai 右边第一个比 Ai 大的 ...
- 牛客OI赛制测试赛2 D 星光晚餐
链接:https://www.nowcoder.com/acm/contest/185/D来源:牛客网 题目描述 Johnson和Nancy要在星光下吃晚餐.这是一件很浪漫的事情. 为了增加星光晚餐那 ...
- 牛客OI赛制测试赛2 C 数组下标
链接:https://www.nowcoder.com/acm/contest/185/C来源:牛客网 题目描述 给出一个数列 A,求出一个数列B. 其中Bi 表示 数列A中 Ai 右边第一个比 ...
- 牛客OI赛制测试赛2 A 无序组数
链接:https://www.nowcoder.com/acm/contest/185/A来源:牛客网 题目描述 给出一个二元组(A,B) 求出无序二元组(a,b) 使得(a|A,b|B)的组数 无序 ...
- Nowcoder | [题解-N189]牛客OI赛制测试赛3
这场说实话确实水(逃*1),表示差一点就AK了(逃*2),然而被卡两个特判的我\(ssfd\)...\(qwq\) 表示这是第一次发整场比赛的题解...还请各位大佬原谅我太蒻写的垃圾啊\(qwq\). ...
- 牛客OI赛制测试赛-序列-模拟
哇这道题好坑啊,可能是我太菜了 题意就是叫把一个连续序列分成K组,使得每个组的和都相等 我最开始的想法是由于要分成K组,那我们知道,每组一定有sum(a[i])/k这样我们只需要每次当num==sum ...
随机推荐
- Codeforces Round #364 (Div. 2)【A,C】
啊啊啊啊啊啊啊啊啊,目睹A->CⅠA全过,最终fstwaA,C;23333333 A题: 题意: 就是分成相等的m堆,每堆有两个位置上的值相加. 思路: fst在sum可能不是偶数,先*2/n; ...
- python 单下划线和双下划线
underline.py __all__ = ['_underline_variable', '__underline_variable', '_underline_func', '__underli ...
- bzoj 1396: 识别子串 && bzoj 2865: 字符串识别【后缀数组+线段树】
根据height数组的定义,和当前后缀串i最长的相同串的长度就是max(height[i],height[i+1]),这个后缀贡献的最短不同串长度就是len=max(height[i],height[ ...
- 分析spring aop的源码实现
AOP就是面向切面编程,我们可以从几个层面来实现AOP. 在编译器修改源代码,在运行期字节码加载前修改字节码或字节码加载后动态创建代理类的字节码,以下是各种实现机制的比较. spring AOP是Sp ...
- LuoguP3964 [TJOI2013]松鼠聚会【切比雪夫距离/前缀和】
题目传送门 前置知识:切比雪夫距离和曼哈顿距离的相互转化--自为风月马前卒 有了这个知识,我们便可以在读入松鼠的家的坐标时,先把他转化一下,然后把最后的总式化简,我们会得到一个充满后缀和以及前缀和的式 ...
- NOIp 2015真题模拟赛 By cellur925
果然我还是最菜的==不接受反驳== Day1 T1:神奇的幻方 思路:直接模拟即可,由于当前放法只与上一放法有关系,用两个变量记录一下即可.10分钟内切掉== 预计得分:100分 实际得分:100分 ...
- Java Web中实现设置多个域名跨域访问
添加以下设置可允许所有域名跨域访问: response.setHeader("Access-Control-Allow-Origin","*"); 但在实际应用 ...
- 水题 Codeforces Round #303 (Div. 2) A. Toy Cars
题目传送门 /* 题意:5种情况对应对应第i或j辆车翻了没 水题:其实就看对角线的上半边就可以了,vis判断,可惜WA了一次 3: if both cars turned over during th ...
- 模拟 HDOJ 5095 Linearization of the kernel functions in SVM
题目传送门 /* 题意:表达式转换 模拟:题目不难,也好理解题意,就是有坑!具体的看测试样例... */ #include <cstdio> #include <algorithm& ...
- iOS开发隐藏tabBar的问题
开发中遇到第一个页面需要显示tabBar,但是第二个页面不需要显示,当回到第一个页面的时候又需要显示的情况. 在第一个页面跳转到第二个页面的时候需要给第二个页面设置tabBar的隐藏 - (void) ...