首页 > 其他分享 >CF R868 (div.2)

CF R868 (div.2)

时间:2023-04-29 23:33:39浏览次数:38  
标签:R868 质数 CF cin int 相乘 mp ans div.2

A. A-characteristic

题意:构造1|-1数列,使数组中两两相乘值为1的对数为k

思路:显而易见与1|-1的出现顺序无关,总结规律易知当1数量为2时对数为一,3时对数为3(1+(3-1)),4时对数为6(3+(4-1)),-1同理,数据量较小,枚举个数即可

 1 #include <bits/stdc++.h>
 2 
 3 using namespace std;
 4 int ans[105];
 5 
 6 void init()
 7 {
 8     ans[1]=0;
 9     for (int i=2;i<=101;i++) ans[i]=i-1+ans[i-1];    
10 }
11 
12 int main()
13 {
14     ios::sync_with_stdio(false);
15     cin.tie(0);cout.tie(0);
16     init();
17     int t;
18     cin>>t;
19     while (t--){
20         int n,k;
21         cin>>n>>k;
22         int ps=1;
23         for (int i=1;i<=n;i++){
24             if (ans[i]+ans[n-i]==k){
25                 ps=0;
26                 cout<<"YES"<<'\n';
27                 for (int j=0;j<i;j++) cout<<1<<" ";
28                 for (int j=0;j<n-i;j++) cout<<-1<<" ";
29                 cout<<'\n';
30                 break;
31             }
32         }
33         if (ps) cout<<"NO"<<'\n';
34     }
35 }

 

B. Sort with Step

题意:如果可以通过多次ai与a(i+k)交换使数组变成最小排列就输出0;如果只是这么做做不到但可以做将任意两个元素交换操作一次后就可以做到就输出1,否则输出-1

思路:若是答案为0,在ai位置上的数对k取模必然等于i对k取模(关系闭包),若有两个位置不能满足就输出1,超过两个就输出-1

 1 #include <bits/stdc++.h>
 2 
 3 using namespace std;
 4 
 5 int main()
 6 {
 7     ios::sync_with_stdio(false);
 8     cin.tie(0);cout.tie(0);
 9     int t;
10     cin>>t;
11     while (t--){
12         int n,k;
13         cin>>n>>k;
14         int sum=0;
15         for (int i=1;i<=n;i++){
16             int q;
17             cin>>q;
18             if (q%k!=i%k){
19                 sum++;
20             }
21         }
22         if (!sum) cout<<0<<'\n';
23         else if (sum==2) cout<<1<<'\n';
24         else cout<<-1<<'\n';
25     }
26 }

 

C. Strongly Composite

题意:一个数因子中若质数个数小于等于合数个数,那么这个数就是强壮数,给你n个数相乘,需要将其转化成强壮数相乘的形式,问最多可以转化成几个强壮数相乘

思路:强壮数可以以两种形式得到,一是n^2,二是至少三个质数相乘,所以可以将给出的数全变成质数相乘的形式并统计每种质因子有多少个,相同的两两配对,不同的三三配对即可获得答案

 1 #include <bits/stdc++.h>
 2 
 3 using namespace std;
 4 const int maxn=1e4;
 5 int prime[maxn],ans;
 6 bool vis[maxn];
 7 map<int,int> mp;
 8 set<int> s;
 9 
10 void init()//素数筛找质数
11 {
12     vis[0]=vis[1]=true;
13     for (int i=2;i<maxn;i++){
14         if (!vis[i]) prime[++prime[0]]=i;
15         for (int j=1;j<=prime[0]&&i*prime[j]<maxn;j++){
16             if (i%prime[j]==0) break;
17             vis[i*prime[j]]=true;
18         }
19     }
20 }
21 
22 void toans(int q)//分解数为质数积
23 {
24     for (int i=1;i<=prime[0];i++){
25         if (q%prime[i]==0){
26             s.insert(prime[i]);
27             while (q%prime[i]==0) q/=prime[i],mp[prime[i]]++;
28         }
29         if (q==1) return;
30     }
31     s.insert(q);
32     mp[q]++;
33 }
34 
35 int main()
36 {
37     ios::sync_with_stdio(false);
38     cin.tie(0);cout.tie(0);
39     init();
40     int t;
41     cin>>t;
42     while (t--){
43         mp.clear();
44         s.clear();
45         ans=0;
46         int n,q;
47         cin>>n;
48         for (int i=0;i<n;i++){
49             cin>>q;
50             toans(q);
51         }
52         int tem=0;
53         for (auto p:s){
54             ans+=mp[p]/2;
55             tem+=mp[p]%2;
56         }
57         ans+=tem/3;
58         cout<<ans<<'\n';
59     }
60 }

 

标签:R868,质数,CF,cin,int,相乘,mp,ans,div.2
From: https://www.cnblogs.com/Favelcpp/p/17364678.html

相关文章

  • CF1763D
    ValidBitonicPermutations-洛谷|计算机科学教育新生态(luogu.com.cn)题意转化一下:先考虑如何构造一个双调的序列。本题的解题核心是:如何构造出双调的序列?(主要是这个技巧要知道)那么如何构造呢?首先来看1,可以放在最左边,也可以放在最右边。        2,同理......
  • CF1729G
    Problem-1729G-Codeforces一道很妙的计数DP。对于样例一:abababacababaaba对于ababa,我们可以删除3位置或5位置。那么思考何时不用删5位置?显然3位置被删除之后,5位置不用进行删除。所以现在i位置是匹配的位置,当区间[i-m+1,i-1](m为T的长度)有一个位置被删了,i位置就......
  • cf-typedb2023-C
    题目链接:https://codeforces.com/problemset/problem/1787/C我是sb,这种dp都没想到。。。思路:首先得发现一个性质(贪心),每个数拆成的两个数一定是一个最大的(尽可能),另一个最小(尽可能)。这点不难证明,随便写写式子可得证。由于每个数只会影响相邻的两个数,所以我们可以dp算答案。......
  • CF600E Lomsat gelral(树上启发式合并)
    题目链接:https://codeforces.com/problemset/problem/600/E这是一道树上启发式合并的题,就只是在模板的基础上稍微变化了一下解题思路:我们需要计算当前u节点的答案,要计算加入非重链节点对此答案的影响,在计算加入节点对ans影响的时候,遍历u除了重链外的所有子树节点(因为重链部分的......
  • 利用snpEff对基因型VCF文件进行变异注释的详细方法
    利用snpEff对VCF文件进行变异注释群体遗传研究中,在获得SNP位点后,我们需要对SNP位点进行注释,对这些SNP位点进行更深的了解。snpEff是一个用于对基因组单核苷酸多态性(SNP)进行注释的软件,snpEff软件可以用于对VCF文件进行变异注释,使用时需要先进行安装,然后构建参考基因组数据库,即......
  • CF1656F Parametric MST 题解
    为了便于解题,先对\(a\)数组从小到大进行排序。首先,根据定义可以得出总价值的表达式:\[\begin{aligned}W&=\sum\limits_{(u,v)\inE}[a_ua_v+t(a_u+a_v)]\\&=\sum\limits_{(u,v)\inE}a_ua_v+t\sum\limits_{(u,v)\inE}(a_u+a_v)\end{aligned}\]接着,我们需要发现一个比较......
  • 题解 CF1264D1
    前言数学符号约定:\(\dbinom{n}{m}\):表示\(n\)选\(m\)。如非特殊说明,将会按照上述约定书写符号。题目分析:考虑题目的问题弱一点的版本,假设此时我们的括号序列是确定的如何求其括号匹配的最深深度。如果你有些许dp基础的话,不难想到如下做法:考虑位置\(i\),将区间\([1,......
  • 题解 CF1264D2
    前言建议大家看一下我对于D1的题解(传送门)后再看本题解,本题解是基于那篇题解的基础上书写的。数学符号约定\(\dbinom{n}{m}\):表示\(n\)选\(m\)。如非特殊说明,将会按照上述约定书写符号。题目分析首先引用一下D1的答案:\(\displaystyle\sum_{i=1}^n\displaystyle\sum_{......
  • cf-edu-142.D
    题目链接:https://codeforces.com/problemset/problem/1792/D算法:tire树求最长公共前缀(lcp)。反思:题目转换出的题意已大致得到,但怎么具体求不会。思路:tire树维护一个结构,1在哪些位置出现,2在哪些位置出现,以此类推。代码:#include<bits/stdc++.h>usingnamespacestd;consti......
  • cf-div.2-868-D
    题目链接:https://codeforces.com/contest/1823/problem/D比赛的时候关键性质已经想到,但没想到怎么正确构造。性质:每次新加一个字母,回文子串的数量最多增加1(因为题目需要不相同的回文子串)。证明:可以用反证法,易证。构造方法:由于k的值很小(只有20),所以对于不再增加(回文子串)的......