codeforces round FF

 

A水题,但是刚开始写的时候,不知道怎么样例过不了,所以就改写了一边,花了10多分钟才a

#include<map>
#include<set>
#include<cmath>
#include<queue>
#include<stack>
#include<vector>
#include<cstdio>
#include<cassert>
#include<iomanip>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
#define pi acos(-1.0)
#define ll long long
#define mod 1000000007
#define ls l,m,rt<<1
#define rs m+1,r,rt<<1|1
#pragma comment(linker, "/STACK:1024000000,1024000000")

using namespace std;

const double g=10.0,eps=1e-7;
const int N=10000+10,maxn=500+100,inf=0x3f3f3f;

bool vis[N];
int a[N];
int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    int p,n;
    cin>>p>>n;
    memset(vis,0,sizeof vis);
    for(int i=1;i<=n;i++)cin>>a[i];
    for(int i=1;i<=n;i++)
    {
        a[i]%=p;
        if(vis[a[i]])
        {
            cout<<i<<endl;
            return 0;
        }
        else vis[a[i]]=1;
    }
    cout<<-1<<endl;
    return 0;
}
A

B也很水,6分钟1a

#include<map>
#include<set>
#include<cmath>
#include<queue>
#include<stack>
#include<vector>
#include<cstdio>
#include<cassert>
#include<iomanip>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
#define pi acos(-1.0)
#define ll long long
#define mod 1000000007
#define ls l,m,rt<<1
#define rs m+1,r,rt<<1|1
#pragma comment(linker, "/STACK:1024000000,1024000000")

using namespace std;

const double g=10.0,eps=1e-7;
const int N=10000+10,maxn=500+100,inf=0x3f3f3f;

int a[30];
int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    string s;
    int n;
    cin>>s>>n;
    int maxx=0;
    for(int i=0;i<26;i++)
    {
        cin>>a[i];
        maxx=max(maxx,a[i]);
    }
    int ans=0;
    for(int i=0;i<s.size();i++)
    {
        int te=s[i]-'a';
        ans+=a[te]*(i+1);
    }
    for(int i=1;i<=n;i++)
        ans+=maxx*(i+s.size());
    cout<<ans<<endl;
    return 0;
}
B

c题wa了两发,原因是全部递增的情况没有考虑,用一个数组记录递增长度,一个记录断点,枚举断点两段长度就行了

#include<map>
#include<set>
#include<cmath>
#include<queue>
#include<stack>
#include<vector>
#include<cstdio>
#include<cassert>
#include<iomanip>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
#define pi acos(-1)
#define ll long long
#define mod 1000000007
#define ls l,m,rt<<1
#define rs m+1,r,rt<<1|1
#pragma comment(linker, "/STACK:1024000000,1024000000")

using namespace std;

const double g=10.0,eps=1e-4;
const int N=100000+10,maxn=500+100,inf=0x3f3f3f;

int in[N],q[N],a[N];
int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    int n;
    cin>>n;
    for(int i=0;i<n;i++)cin>>a[i];
    int cnt=0;
    for(int i=0;i<n-1;i++)
    {
        if(a[i+1]>a[i])in[cnt]++;
        else q[cnt]=i,cnt++;
    }
    q[cnt]=n-1;
    for(int i=0;i<=cnt;i++)
    {
        in[i]++;
       /* cout<<in[i]<<endl;
        cout<<q[i]<<endl;*/
    }
    int ans=1;
    for(int i=0;i<cnt;i++)
    {
        if(q[i]>0&&a[q[i]+1]-1>a[q[i]-1])ans=max(ans,in[i]+in[i+1]);
        else if(in[i+1]>1&&a[q[i]]+1<a[q[i]+2])ans=max(ans,in[i]+in[i+1]);
        ans=max(ans,in[i]+1);
      //  cout<<ans<<endl;
    }
    ans=max(ans,in[cnt]+1);
    if(ans>n)ans=n;
    cout<<ans<<endl;
    return 0;
}
C

D题有点坑,先暴力求出行和列的k次取值(优先队列优化),然后枚举0到k的情况,就是行取i次,列取k-i次,这样的话每列i*q被取出,又有k-i列,所以减去i*(k-i)*q,还要注意数组大小。。。

#include<map>
#include<set>
#include<cmath>
#include<queue>
#include<stack>
#include<vector>
#include<cstdio>
#include<cassert>
#include<iomanip>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
#define pi acos(-1.0)
#define ll long long
#define mod 1000000007
#define ls l,m,rt<<1
#define rs m+1,r,rt<<1|1
#pragma comment(linker, "/STACK:1024000000,1024000000")

using namespace std;

const double g=10.0,eps=1e-4;
const int N=1000+10,maxn=500+100,inf=0x3f3f3f;

ll ma[N][N],ro[N*N],co[N*N];
priority_queue<ll>row,col;
int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    ll n,m,k,p;
    cin>>n>>m>>k>>p;
    for(int i=0;i<n;i++)
        for(int j=0;j<m;j++)
           cin>>ma[i][j];
    for(int i=0;i<n;i++)
    {
        ll res=0;
        for(int j=0;j<m;j++)res+=ma[i][j];
        row.push(res);
    }
    for(int i=0;i<m;i++)
    {
        ll res=0;
        for(int j=0;j<n;j++)res+=ma[j][i];
        col.push(res);
    }
    memset(co,0,sizeof co);
    memset(ro,0,sizeof ro);
    for(int i=1;i<=k;i++)
    {
        ll cnt=row.top();
        ro[i]=ro[i-1]+cnt;
        row.pop();
        row.push(cnt-m*p);
        cnt=col.top();
        co[i]=co[i-1]+cnt;
        col.pop();
        col.push(cnt-n*p);
    }
    ll ans=-1e18;
    for(ll i=0;i<=k;i++)
        ans=max(ans,co[k-i]+ro[i]-1ll*(k-i)*i*p);
    cout<<ans<<endl;
    return 0;
}
/*********************
1 2 2 2
1 3
*********************/
D

 

posted @ 2017-07-18 14:52  walfy  阅读(198)  评论(0编辑  收藏  举报