首頁  >  文章  >  web前端  >  Codeforces Round #276 (Div. 2) 解题报告_html/css_WEB-ITnose

Codeforces Round #276 (Div. 2) 解题报告_html/css_WEB-ITnose

WBOY
WBOY原創
2016-06-24 11:54:36978瀏覽

题目地址:http://codeforces.com/contest/485

A题:Factory

按照过程模拟,并判断是否出现循环,如果出现循环,说明肯定不可能,直接跳出。

代码如下:

#include <iostream>#include <stdio.h>#include <string.h>#include <algorithm>using namespace std;int _hash[100001];int main(){    int a, m, i, flag=0;    memset(_hash,0,sizeof(_hash));    scanf("%d%d",&a,&m);    a=a%m;    _hash[a]=1;    while(1)    {        a=a*2%m;        if(a==0)        {            flag=1;            break;        }        if(_hash[a])        {            break;        }        _hash[a]=1;    }    if(!flag) puts("No");    else        puts("Yes");    return 0;}</algorithm></string.h></stdio.h></iostream>

B题:Valuable Resources

直接找行与列的最大值和最小值,不多说

代码如下:

#include <iostream>#include <cstdio>#include <string>#include <cstring>#include <stdlib.h>#include <math.h>#include <ctype.h>#include <queue>#include <map>#include <set>#include <algorithm>using namespace std;#define LL __int64const LL INF=1e11;int main(){    LL n, x, y, max1, max2, min1, min2, s;    while(scanf("%I64d",&n)!=EOF)    {        max1=-INF;        max2=-INF;        min1=INF;        min2=INF;        while(n--)        {            scanf("%I64d%I64d",&x,&y);            max1=max(max1,x);            max2=max(max2,y);            min1=min(min1,x);            min2=min(min2,y);        }        s=max(max1-min1,max2-min2);        s*=s;        printf("%I64d\n",s);    }    return 0;}</algorithm></set></map></queue></ctype.h></math.h></stdlib.h></cstring></string></cstdio></iostream>

C题:Bits

贪心

从小的开始,不断从低位开始加1,直到大于较大数为止。

代码如下:

#include <iostream>#include <cstdio>#include <string>#include <cstring>#include <stdlib.h>#include <math.h>#include <ctype.h>#include <queue>#include <map>#include <set>#include <algorithm>using namespace std;#define LL __int64const LL INF=1e11;int s[1000];int main(){    int n, len, max1;    LL x, y, z1, z, i;    scanf("%d",&n);    while(n--)    {        scanf("%I64d%I64d",&x,&y);        z1=x;        len=0;        memset(s,0,sizeof(s));        while(z1)        {            s[len++]=z1%2;            z1/=2;        }        z=x;        for(i=0;iy)                {                    printf("%I64d\n",z);                    break;                }                z=x;            }        }    }    return 0;}</algorithm></set></map></queue></ctype.h></math.h></stdlib.h></cstring></string></cstdio></iostream>

D题:Maximum Value

对于x来说,在k*x~(k+1)*x这段范围内,余数最大的肯定是最接近(k+1)*x的数,所以可以预处理出来所有最接近当前数的数,然后分别枚举每个数的倍数,并不断更新即可。

代码如下:

#include <iostream>#include <cstdio>#include <string>#include <cstring>#include <stdlib.h>#include <math.h>#include <ctype.h>#include <queue>#include <map>#include <set>#include <algorithm>using namespace std;#define LL __int64const int INF=0x3f3f3f3f;int _hash[2100000], dp[2100000], a[2100000];int main(){    int n, i, j, x, min1, ans, max1;    while(scanf("%d",&n)!=EOF)    {        memset(_hash,0,sizeof(_hash));        min1=INF;        max1=-1;        for(i=0; i<n i scanf _hash min1="min(min1,x);" max1="max(max1,x);" for if dp else ans="0;" j continue break printf return>  <br>  <br>  <p></p> </n></algorithm></set></map></queue></ctype.h></math.h></stdlib.h></cstring></string></cstdio></iostream>
陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn