codeforces round #262 (div2)

这个是前几天作的比赛,因为今晚上还有CF所以就把前几天写的东西总结一下。

460A  直接模拟题意,不过我在作的过程中一直担心余数会对结果产生影响。

#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
    int n,m;
    cin>>n>>m;
    for(int i=n;;i++)
    {
        if(n+i/m==i)
            {
                printf("%d\n",i);
                break;
            }
    }
    return 0;
}

460 B   其实也是一个模拟题,不过由于数据量比较大,所以你得转化一下思路,要不然肯定会超时,x?=?b·s(x)a?+?c,?

由于是s(x)代表的是各个位数的和,所以你可以从它为出发点来找到符合题意的x,想到这一点就变得很简单了。

#include<iostream>
#include<cstdio>
#define maxn 600005
using namespace std;
__int64 w[maxn];
int main()
{
    __int64 i;
    __int64 a,b,c;
    cin>>a>>b>>c;
    int t=0;
    for(__int64 i=1; i<=99; i++)
    {
        __int64 x=1;
        __int64 sum=0;
        for(int m=1; m<=a; m++)
            x*=i;
        x*=b;
        x+=c;
        __int64  u=x;
        while(u)
        {
            sum+=u%10;
            u/=10;
        }
        if(sum==i&&x>0&&x<=1000000000)
            w[t++]=x;
    }
    cout<<t<<endl;
    if(t>0)
    {
        for(int j=0; j<t-1; j++)
            cout<<w[j]<<" ";
        cout<<w[t-1]<<endl;
    }
    else ;
    return 0;
}

460c 其实题意是很好理解的,我当时的第一反应就是要用数据结构作,每一次都要统计,然后选出那个最小值最

多的那一段进行种植,然后试了试树状数组,结果由于好几个地方不知道怎么变化,暴力给写了下,果断在第八个样

例那里就给T了,哎,然后就想不出来啥好办法了。

最后看了下别人的代码,竟然是二分给做的,我在想二分竟然能做吗?

然后看了好久的代码,才慢慢理解了,只能说他们太屌了。

归结起来,其实我觉得难的地方有两点:一是你要理解这个题它所要的最终状态是什么?二是处理二分的几个比

较重要的细节。

#include<map>
#include<cmath>
#include<queue>
#include<vector>
#include<cstdio>
#include<string>
#include<cstring>
#include<iostream>
#include<algorithm>
#define pi acos(-1.0)
#define inf 0xfffffff
#define maxn 200110//不理解,为啥题目给的是1e5,我开到10010在第十五组样例会wa,改大点就行了。求解释?
using namespace std;
__int64 a[maxn],b[maxn];
int n,m,w;
int solve(__int64 mid)
{
    __int64 sum=0;
    __int64 ans=0;
    memset(b,0,sizeof(b));
    for(int i=0; i<n; i++)
    {
        sum+=b[i];
        if(sum+a[i]<mid)
        {
            ans+=mid-(sum+a[i]);//需要更新每一段的值,如果它大于更新的次数的话,就说明不行。
            if(ans>(__int64)(m)) return 0;
            b[i+w]-=mid-(sum+a[i]);//用来统计到下一段的开始的时候要减去上一段增加的值。
            sum+=mid-(sum+a[i]);
        }
    }
    return 1;
}
int main()
{
    scanf("%d%d%d",&n,&m,&w);
    __int64 minn=9999999999;
    for(int i=0; i<n; i++)
    {
        scanf("%I64d",&a[i]);
        minn=min(minn,a[i]);
    }
    __int64 left,right,mid;
    left=1,right=minn+m;//最大的可能就是让最小的值连续增加m。
    while(left<=right)
    {
        mid=(left+right)>>1;
        if(solve(mid))  left=mid+1;
        else right=mid-1;
    }
    printf("%I64d\n",right);
    return 0;
}
时间: 2024-11-07 14:45:12

codeforces round #262 (div2)的相关文章

Codeforces Round #262 (Div. 2) 总结:二分

B. Little Dima and Equation 思路:本来前两题都很快做出来的,然后觉得ranting应该可以增加了.然后觉得代码没问题了,又想到了一组cha人的数据,然后就锁了,然后刚锁就被别人cha了看了代码才发现尼玛忘了判断小于10^9了,然后C反正想了好多种方法都不会就没心情了,就这样rating又降了 #pragma comment(linker, "/STACK:1024000000,1024000000") #include<iostream> #in

Codeforces Round #262 (Div. 2)

Codeforces Round #262 (Div. 2) A:水题,直接不断模拟即可 B:由于s(x)大小最大到1e9,所以数位和最多为81,这样只要枚举s(x),就只要枚举1到81即可,然后在计算出x,判断是否符合,符合就加进答案 C:二分高度,然后判断的时候for一遍,每次不符合的位置就去浇水,从左往右推一遍即可 D:构造,如果k >= 5, 那么就可以直接放偶数,奇数,偶数,奇数,由于偶数和偶数+1异或必然为1,所以这样放4个异或和就到最小的0了,然后k = 1,2,4都可以特判到,关

codeforces round #257 div2 C、D

本来应该认真做这场的,思路都是正确的. C题,是先该横切完或竖切完,无法满足刀数要求,再考虑横切+竖切(竖切+横切), 因为横切+竖切(或竖切+横切)会对切割的东西产生交叉份数,从而最小的部分不会尽可能的大. 代码如下,虽然比较长.比较乱,但完全可以压缩到几行,因为几乎是4小块重复的代码,自己也懒得压缩 注意一点,比如要判断最小块的时候,比如9行要分成2份,最小的剩下那份不是9取模2,而应该是4 m/(k+1)<=m-m/(k+1)*k          #include<bits/stdc+

codeforces Round #250 (div2)

a题,就不说了吧 b题,直接从大到小排序1-limit的所有数的lowbit,再从大到小贪心组成sum就行了 1 #include<cstdio> 2 #include<iostream> 3 #include<algorithm> 4 #include<cstring> 5 #define N 200000 6 using namespace std; 7 int pos[N],a[N],s[N],f[N],la[N],b[N],i,j,k,ans,n,p

Codeforces Round #262 (Div. 2)460A. Vasya and Socks(简单数学题)

题目链接:http://codeforces.com/contest/460/problem/A A. Vasya and Socks time limit per test 1 second memory limit per test 256 megabytes input standard input output standard output Vasya has n pairs of socks. In the morning of each day Vasya has to put o

Codeforces Round #262 (Div. 2) 460B. Little Dima and Equation(枚举)

题目链接:http://codeforces.com/problemset/problem/460/B B. Little Dima and Equation time limit per test 1 second memory limit per test 256 megabytes input standard input output standard output Little Dima misbehaved during a math lesson a lot and the nas

Codeforces Round#320 Div2 解题报告

Codeforces Round#320 Div2 先做个标题党,骗骗访问量,结束后再来写咯. codeforces 579A Raising Bacteria codeforces 579B Finding Team Member codeforces 579C A Problem about Polyline codeforces 579D "Or" Game codeforces 579E Weakness and Poorness codeforces 579F LCS Aga

Codeforces Round #262 (Div. 2) 题解

A. Vasya and Socks time limit per test 1 second memory limit per test 256 megabytes input standard input output standard output Vasya has n pairs of socks. In the morning of each day Vasya has to put on a pair of socks before he goes to school. When

Codeforces Round #254(div2)A

很有趣的题.想到了就非常简单,想不到就麻烦了. 其实就是一种逆向思维:最后结果肯定是这样子: WBWBWBWB... BWBWBWBW... WBWBWBWB... ... 里面有“-”的地方改成“-”就行了. 但是我开始是正着想的,想每个点怎么处理,这还要看它周围点的状态,越想越麻烦... 这题中体现的正难则反的逆向思维很值得学习. #include<iostream> #include<cstdio> #include<cstdlib> #include<cs