首页 > 其他 > 详细

2018.9.21 Codeforces Round #511

时间:2018-09-22 22:57:29      阅读:239      评论:0      收藏:0      [点我收藏+]

只写了AB,甚至还WA了一次A题,暴露了蒟蒻的本质=。=

感觉考的时候有好多正确或和正解有关的思路,但是就想不出具体的解法或者想的不够深(长)(怕不是过于鶸)

话说CF的E题怎么都这么清奇=。=

A.Little C Loves 3 I

随便拆一下就好了,大概全场就我一个心太急写挂了一次TAT

技术分享图片
 1 #include<cstdio>
 2 #include<cstring>
 3 #include<algorithm>
 4 using namespace std;
 5 int main ()
 6 {
 7     long long n; scanf("%lld",&n);
 8     if(n%3==2) printf("%lld 1 2",n-3);
 9     else printf("%lld 1 1",n-2);
10     return 0;
11 }
View Code

B.Cover Points

初中数学知识(?)或者随手推一推,水水(我**就会这俩水题)

技术分享图片
 1 #include<cstdio>
 2 #include<cstring>
 3 #include<algorithm>
 4 using namespace std;
 5 int main ()
 6 {
 7     long long n,m,p,ans=0;
 8     scanf("%lld",&n);
 9     for(int i=1;i<=n;i++)
10         scanf("%lld%lld",&m,&p),ans=max(m+p,ans);
11     printf("%lld",ans);
12     return 0;
13 }
View Code

C.Enlarge GCD

题目并不难......

然而被这题确实没做出来,调的时候也调了半天,我好菜啊=。=

首先我们求一个全序列的gcd,然后从每个数中除掉它,剩下的数肯定是互质的,也就是说现在我们要从这些剩下的数中删掉最少的数使得他们不互质。我们将每个数分解质因数,统计出现次数最多的质因数(出现在一个数里算是一次),保留下它肯定就是最优的,于是用总数减去出现次数更新答案即可

技术分享图片
 1 #include<cstdio>
 2 #include<cstring>
 3 #include<algorithm>
 4 using namespace std;
 5 const int N=300005,M=15000005;
 6 int mpr[M],pri[M],cnt[M],num[N];
 7 int n,g,maxx,ans=2e9;
 8 int gcd(int a,int b)
 9 {
10     return b?gcd(b,a%b):a; 
11 }
12 inline int maxi(int a,int b)
13 {
14     return a>b?a:b;
15 }
16 inline int mini(int a,int b)
17 {
18     return a<b?a:b;
19 }
20 int main ()
21 {
22     scanf("%d",&n);
23     for(register int i=1;i<=n;i++)
24     {
25         scanf("%d",&num[i]);
26         g=gcd(g,num[i]),maxx=maxi(maxx,num[i]);
27     }
28     mpr[1]=1; 
29     for(register int i=2,sz=0;i<=maxx;i++)
30     {
31         if(!mpr[i]) pri[++sz]=mpr[i]=i;
32         for(int j=1;j<=sz&&i*pri[j]<=maxx;j++)
33         {
34             mpr[i*pri[j]]=i;
35             if(!(i%pri[j])) break;
36         }
37     }
38     for(register int i=1;i<=n;i++)
39     {
40         num[i]/=g;
41         while(num[i]!=1)
42         {
43             long long tmp=++cnt[mpr[num[i]]];
44             ans=mini(ans,n-tmp),num[i]/=mpr[num[i]];
45         }
46     }
47     if(ans>=n) ans=-1;
48     printf("%d",ans);
49     return 0;
50 }
View Code

D.Little C Loves 3 II

这题毒瘤啊,各种分类海星

比赛的时候怎么就没玩玩小数据呢,明明能A的TAT

首先的首先,要考虑$n*m$的奇偶性,不解释

然后我们可以发现,有些$n*m$是可以填满且无法被其他的$n*m$表示出来的,它们分别是

$1*6$,$2*4$,$2*5$

所以说我们可以考虑用这些块填满棋盘,最后小块单独处理

那么没什么可说的,我们开始讨论吧=。=

1.$n,m$都为偶数

这种情况只有$(2,2)$填不满,别的都可以填满

2.$n,m$都为奇数

这种情况

技术分享图片
 1 #include<cstdio>
 2 #include<cstring>
 3 #include<algorithm>
 4 using namespace std;
 5 long long line[6]={0,1,2,3,2,1};
 6 long long n,m;
 7 int main ()
 8 {
 9     scanf("%lld%lld",&n,&m);
10     if(n>m) swap(n,m);
11     if(n==1) printf("%lld",m-line[m%6]);
12     else if(!(n&1)&&!(m&1)) (n==2&&m==2)?printf("0"):printf("%lld",n*m);
13     else if((n&1)&&(m&1)) printf("%lld",n*m-1);
14     else
15     {
16         if(n&1) swap(n,m);
17         if(n==2&&m==3) printf("4");
18         else if(n==2&&m==7) printf("12");
19         else printf("%lld",n*m);
20     }
21     return 0;
22 } 
View Code

 

2018.9.21 Codeforces Round #511

原文:https://www.cnblogs.com/ydnhaha/p/9691441.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!