您的位置:首页 > 其它

Codeforces Round #441 (Div. 2, by Moscow Team Olympiad)

2017-10-17 16:40 549 查看

A题:一个三角形,一开始在C点,给边长a,b,c问上面走n-1次走多少步。

???为什么会写错???

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<algorithm>
//#include<assert.h>
#include<math.h>
//#include<iostream>
using namespace std;

int a,b,c,n;
int main()
{
scanf("%d%d%d%d",&n,&a,&b,&c);
int ans=0;
if (n==1) printf("0\n");
else if (a<=b && a<=c) printf("%d\n",a*(n-1));//不要少了等于号!!!!
else if (b<=c && b<=a) printf("%d\n",b*(n-1));//不要少了等于号!!!!
else printf("%d\n",min(a,b)+c*(n-2));
return 0;
}

B题:膜m意义下同个值超过K个即可。

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<algorithm>
//#include<assert.h>
#include<math.h>
//#include<iostream>
using namespace std;

int n,K,m;
#define maxn 100011
int a[maxn],cnt[maxn];
int main()
{
scanf("%d%d%d",&n,&K,&m);
for (int i=1;i<=n;i++) scanf("%d",&a[i]),cnt[a[i]%m]++;
int ans=-1;
for (int i=0;i<m;i++)
if (cnt[i]>=K) ans=i;
if (ans<0) printf("No\n");
else
{
puts("Yes");
int cc=0;
for (int i=1;i<=n;i++)
{
if (a[i]%m==ans) cc++,printf("%d ",a[i]);
if (cc==K) break;
}
}
return 0;
}

C题:设答案x,n-x>=9*9,检测n前面若干个数即可。

1 #include<stdio.h>
2 #include<string.h>
3 #include<stdlib.h>
4 #include<algorithm>
5 //#include<assert.h>
6 #include<math.h>
7 #include<iostream>
8 using namespace std;
9
10 int n;
11 #define maxn 200011
12 int a[maxn],lmax[maxn],rmax[maxn],lch[maxn],rch[maxn],sta[maxn],top;
13 int hus[33][maxn],hut[33];
14 #define LL long long
15 int main()
16 {
17     scanf("%d",&n);
18     for (int i=1;i<=n;i++) scanf("%d",&a[i]);
19     top=0;
20     for (int i=1;i<=n;i++)
21     {
22         while (top && a[sta[top]]<=a[i]) top--;
23         if (!top) lmax[i]=1;
24         else lmax[i]=sta[top]+1;
25         sta[++top]=i;
26     }
27     top=0;
28     for (int i=n;i>=1;i--)
29     {
30         while (top && a[sta[top]]<a[i]) top--;
31         if (!top) rmax[i]=n;
32         else rmax[i]=sta[top]-1;
33         sta[++top]=i;
34     }
35     memset(hut,0,sizeof(hut));
36     for (int i=1;i<=n;i++)
37     {
38         lch[i]=0;
39         for (int j=0;j<=30;j++)
40         {
41             if (a[i]&(1<<j)) hus[j][++hut[j]]=i;
42             else if (hut[j]) lch[i]=max(lch[i],hus[j][hut[j]]);
43         }
44         if (lch[i]<lmax[i]) lch[i]=lmax[i]-1;
45     }
46     memset(hut,0,sizeof(hut));
47     for (int i=n;i>=1;i--)
48     {
49         rch[i]=n+1;
50         for (int j=0;j<=30;j++)
51         {
52             if (a[i]&(1<<j)) hus[j][++hut[j]]=i;
53             else if (hut[j]) rch[i]=min(rch[i],hus[j][hut[j]]);
54         }
55         if (rch[i]>rmax[i]) rch[i]=rmax[i]+1;
56     }
57     LL ans=0;
58     for (int i=1;i<=n;i++)
59         ans+=1ll*(rmax[i]-rch[i]+1)*(i-lmax[i]+1)+1ll*(rmax[i]-i+1)*(lch[i]-lmax[i]+1)
60         -1ll*(rmax[i]-rch[i]+1)*(lch[i]-lmax[i]+1);
61 //    for (int i=1;i<=n;i++) cout<<i<<' '<<lmax[i]<<' '<<lch[i]<<' '<<rmax[i]<<' '<<rch[i]<<endl;
62     printf("%I64d\n",ans);
63     return 0;
64 }
View Code

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: