【Codeforces】Round #376 (Div. 2)

http://codeforces.com/contest/731

不发题面了,自己点链接

总结一下

考场上

 

原以为这次要加很多raiting。。。

但FST狗记邓,只加了58rating

总结一下

  • ABC切得很快(保持)
  • B题WA了2发不应该,没有想清楚
  • F题写了大暴力,但不优美,虽然过了P,但就没有想了,很严重问题,得意忘形,虽然知道FST,但有侥幸心里,真正考试就完了
  • 以为拿到了分就不干事了,严重问题,真正考试一定要写暴力拍
  • 后来没有干事,既没有hack又没有去写DE不应该

A Night at the Museum

Solution:Implementation,String

// <A.cpp> - Sun Oct 16 17:45:40 2016
// This file is made by YJinpeng,created by XuYike's black technology automatically.
// Copyright (C) 2016 ChangJun High School, Inc.
// I don't know what this program is.

#include <iostream>
#include <vector>
#include <algorithm>
#include <cstring>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#define MOD 1000000007
#define INF 1e9
using namespace std;
typedef long long LL;
const int MAXN=110;
inline int gi() {
	register int w=0,q=0;register char ch=getchar();
	while((ch<'0'||ch>'9')&&ch!='-')ch=getchar();
	if(ch=='-')q=1,ch=getchar();
	while(ch>='0'&&ch<='9')w=w*10+ch-'0',ch=getchar();
	return q?-w:w;
}
char s[MAXN];
int main()
{
	freopen("A.in","r",stdin);
	freopen("A.out","w",stdout);
	scanf("%s",s);int l=strlen(s);
    char ch='a';int ans=0;
    for(int i=0;i<l;i++)
        ans+=min((s[i]-ch+26)%26,(ch-s[i]+26)%26),ch=s[i];
    printf("%d",ans);
	return 0;
}

B Coupons and Discounts

题目大意:每天要买a[i]个东西,买的方式有两种:两天一天买一个 or 一天买两个,问是否有合法方案

Solution:Greedy+递推,考虑一天,奇数的话必须要用第一种方式,那就之后那天要买一个,几个flag即可,一路推过去,<0不合法,偶数的话直接用第二种→ 贪心,不用麻烦后面那天。

反思:居然wa了两发,7~80分啊。。(notice 最后一次是否要之后填充,flag清空)

// <B.cpp> - Sun Oct 16 17:45:40 2016
// This file is made by YJinpeng,created by XuYike's black technology automatically.
// Copyright (C) 2016 ChangJun High School, Inc.
// I don't know what this program is.

#include <iostream>
#include <vector>
#include <algorithm>
#include <cstring>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#define MOD 1000000007
#define INF 1e9
using namespace std;
typedef long long LL;
const int MAXN=100010;
const int MAXM=100010;
inline int gi() {
	register int w=0,q=0;register char ch=getchar();
	while((ch<'0'||ch>'9')&&ch!='-')ch=getchar();
	if(ch=='-')q=1,ch=getchar();
	while(ch>='0'&&ch<='9')w=w*10+ch-'0',ch=getchar();
	return q?-w:w;
}
void pri(){printf("NO");exit(0);}
int main()
{
	freopen("B.in","r",stdin);
	freopen("B.out","w",stdout);
	int n=gi(),last=0;
    for(int i=1;i<=n;i++){
        int x=gi()-last;
        if(x<0)pri();
        if(x&1)last=1;else last=0;
    }if(last)pri();else printf("YES");
    return 0;
}

C Socks

有n只袜子,每只袜子有一个颜色,有一些约束(即某天的左右两边袜子颜色要相同),然后问你最少要改多少只?

显然并查集,然后贪心,一个联通块内的颜色要全相同,Greedy-找出颜色已经相同的最多数目,答案加上其他要改的即可

// <C.cpp> - Sun Oct 16 17:45:40 2016
// This file is made by YJinpeng,created by XuYike's black technology automatically.
// Copyright (C) 2016 ChangJun High School, Inc.
// I don't know what this program is.

#include <iostream>
#include <vector>
#include <algorithm>
#include <cstring>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#define MOD 1000000007
#define INF 1e9
using namespace std;
typedef long long LL;
const int MAXN=200010;
inline int gi() {
	register int w=0,q=0;register char ch=getchar();
	while((ch<'0'||ch>'9')&&ch!='-')ch=getchar();
	if(ch=='-')q=1,ch=getchar();
	while(ch>='0'&&ch<='9')w=w*10+ch-'0',ch=getchar();
	return q?-w:w;
}
int f[MAXN],a[MAXN],c[MAXN];vector<int>b[MAXN];
int find(int x){return f[x]==x?x:f[x]=find(f[x]);}
int main()
{
	freopen("C.in","r",stdin);
	freopen("C.out","w",stdout);
	int n=gi(),m=gi(),k=gi(),ans=0;k++;
    for(int i=1;i<=n;i++)a[i]=gi(),f[i]=i;
    while(m--){
        int l=gi(),r=gi();
        if(find(l)!=find(r))f[f[l]]=f[r];
    }
    for(int i=1;i<=n;i++)
        b[find(i)].push_back(i);
    for(int i=1;i<=n;i++){
        if(f[i]!=i)continue;int now=0;
        for(int j=0,to=b[i].size();j<to;j++){
            c[a[b[i][j]]]++;
            if(c[a[b[i][j]]]>now)now=c[a[b[i][j]]];
        }
        ans+=b[i].size()-now;
        for(int j=0,to=b[i].size();j<to;j++)c[a[b[i][j]]]--;
    }printf("%d",ans);
	return 0;
}

D

挖坑~

E

挖坑~

F Video Cards

给你一列数a[],选择一个标准,使得其他的数减小至他的倍数,使得和最大?

CF给的标签:brute force(暴力)implementation(实现)number theory(数论)-醉了
F是个送肉题。。。FST。。。。
直接看代码吧
暴力也分优美与垃圾
TLE on Test 23(P都过了,2×10^5都过了,结果FST,10^4没过)-暴力加break
// <F.cpp> - Sun Oct 16 17:45:40 2016
// This file is made by YJinpeng,created by XuYike's black technology automatically.
// Copyright (C) 2016 ChangJun High School, Inc.
// I don't know what this program is.

#include <iostream>
#include <vector>
#include <algorithm>
#include <cstring>
#include <cstdio>
#include <cstdlib>
#include <cmath>
using namespace std;
typedef long long LL;
const int MAXN=200010;
inline int gi() {
	register int w=0,q=0;register char ch=getchar();
	while((ch<'0'||ch>'9')&&ch!='-')ch=getchar();
	if(ch=='-')q=1,ch=getchar();
	while(ch>='0'&&ch<='9')w=w*10+ch-'0',ch=getchar();
	return q?-w:w;
}
int a[MAXN];LL f[MAXN];
int main()
{
	int n=gi();LL ans=0;
    for(int i=1;i<=n;i++)a[i]=gi();
    sort(a+1,a+1+n);
    for(int i=1;i<=n;i++)f[i]=f[i-1]+a[i];
    for(int i=1;i<=n;i++){
        LL now=a[i];
        for(int j=n;j>i;j--){
            if(now+f[j]-f[i]<=ans)break;
            now+=a[j]/a[i]*a[i];
        }
        if(now>ans)ans=now;
    }printf("%I64d",ans);
	return 0;
}

AC-暴力+统计

// <F.cpp> - Sun Oct 16 17:45:40 2016
// This file is made by YJinpeng,created by XuYike's black technology automatically.
// Copyright (C) 2016 ChangJun High School, Inc.
// I don't know what this program is.


#include <iostream>
#include <vector>
#include <algorithm>
#include <cstring>
#include <cstdio>
#include <cstdlib>
#include <cmath>
using namespace std;
typedef long long LL;
const int MAXN=200001;
inline int gi() {
	register int w=0,q=0;register char ch=getchar();
	while((ch<'0'||ch>'9')&&ch!='-')ch=getchar();
	if(ch=='-')q=1,ch=getchar();
	while(ch>='0'&&ch<='9')w=w*10+ch-'0',ch=getchar();
	return q?-w:w;
}
LL s[MAXN];int a[MAXN];
int main()
{
	freopen("F.in","r",stdin);
	freopen("F.out","w",stdout);
	int n=gi();LL ans=0;
    for(int i=1;i<=n;i++)a[gi()]++;
    for(int i=1;i<MAXN;i++)s[i]=s[i-1]+a[i];
    for(int i=1;i<MAXN;i++)
        if(a[i]){
            LL now=0;int t=MAXN/i;
            for(int j=1;j<t;j++)
                now+=1LL*(s[i*(j+1)-1]-s[i*j-1])*j*i;
            now+=1LL*(s[MAXN-1]-s[i*t-1])*i*t;
            if(now>ans)ans=now;
        }
    printf("%lld",ans);
	return 0;
}

  

 

posted @ 2016-10-18 14:57  _Mashiro  阅读(249)  评论(0编辑  收藏  举报