5.1 training 2 (5.1) 总结

来源:互联网 发布:普利策数据新闻奖 编辑:程序博客网 时间:2024/05/16 01:35

2010年全国大学生程序设计邀请赛(福州)


FZU 1909
A水题 0:04:35 1Y

#include <iostream>#include <cstdio>using namespace std;int a[4];int main(){    //freopen("/home/moor/Code/input.txt","r",stdin);    int ncase;    scanf("%d",&ncase);    for(int h=1;h<=ncase;++h)    {        bool flag=0;        int sum=0;        for(int i=0;i<4;++i)            scanf("%d",&a[i]),sum+=a[i];        for(int i=0;i<4;++i)            for(int j=i+1;j<4;++j)                if((a[i]+a[j])*2==sum)                    flag=1;        printf("Case %d: %s\n",h,flag?"Yes":"No");    }}


FZU 1913
E水题0:08:28 1Y
#include <iostream>#include <cstdio>#include <algorithm>#include <string>using namespace std;int a[4];int main(){    //freopen("/home/moor/Code/input.txt","r",stdin);    int ncase,len;    string a,b;    scanf("%d",&ncase);    for(int h=1;h<=ncase;++h)    {        int ans = 0;        cin>>len>>a;        b = a;        sort(b.begin(),b.end());        for(int i = 0; i < len; i++)            if(a[i]!=b[i]) ans++;        printf("Case %d: %d\n",h,ans);    }}


FZU 1914
F杂题,线性扫描一遍数组1:19:16 5Y0:27:40:TLE,用了cin,cout忘记改回来了0:30:10:WA1:06:47:TLE,补了一个坑,结果死循环了1:08:48:WA,找到死循环的地方了,改了就交了==,中间竟然就隔了两分钟,速度好快的说1:19:16:AC,Moor出了组数据找到了坑好吧,其实这道题还是可以少点罚时的
#include <iostream>#include <cstdio>#include <algorithm>#include <string>#include <cstring>#define MAXN 500010using namespace std;int a[MAXN];bool vi[MAXN];int main(){    //freopen("/home/moor/Code/input.txt","r",stdin);    int ncase,n,ans;    long long prev;    scanf("%d",&ncase);    for(int h=1;h<=ncase;++h)    {        bool flag=0,f3;        scanf("%d",&n);        for(int i=0;i<n;++i)            scanf("%d",&a[i]),flag|=(a[i]<0);        for(int i=0;i<n;++i)            vi[i]=1;        ans=0;        f3=0;        for(int i=n-1,j;flag;)        {            prev=0;            j=i;            while(1)            {                prev+=a[j];                if(prev>0)  break;                else   if(vi[j])                    vi[j]=0,f3=0;                --j;                if(j<0)                    j=n-1;            }            i=j;            while(a[i]>0||!vi[i])            {                --i;                if(i<0)                {                    if(f3)                    {                        flag=0;                        break;                    }                    else    f3=1;                    i=n-1;                }            }        }        for(int i=0;i<n;++i)            ans+=(vi[i]>0);        printf("Case %d: %d\n",h,ans);    }}
FZU 1920
L扫雷模拟,稍难的水题0:44:15 1YMoor卡F题的时候发现L题有人过了,我检查F题,
Moor和hq看L,配合的还是不错的
#include <iostream>#include <cstdio>#include <algorithm>#include <string>#include <queue>#include <cstring>#define MAXN 110#define MP(x,y) make_pair((x),(y))#define FI first#define SE secondusing namespace std;const int dir[8][2]={{0,1},{1,0},{-1,0},{0,-1},{1,1},{-1,1},{1,-1},{-1,-1}};char ma[MAXN][MAXN];void bfs(int x,int y){    queue<pair<int,int> >que;    que.push(MP(x,y));    while(que.size())    {        x=que.front().FI,y=que.front().SE;        que.pop();        if(ma[x][y]!='0')        {            ma[x][y]='*';            continue;        }        ma[x][y]='*';        for(int i=0;i<8;++i)            que.push(MP(x+dir[i][0],y+dir[i][1]));    }}int main(){    //freopen("/home/moor/Code/input.txt","r",stdin);    int ncase,n,ans;    scanf("%d",&ncase);    for(int h=1;h<=ncase;++h)    {        scanf("%d",&n);        memset(ma,0,sizeof(ma));        for(int i=1;i<=n;++i)            scanf("%s",&ma[i][1]);        ans=0;        for(int i=1;i<=n;++i)            for(int j=1;j<=n;++j)                if(ma[i][j]=='0')                    bfs(i,j),++ans;        for(int i=1;i<=n;++i)            for(int j=1;j<=n;++j)                if(ma[i][j]>='1'&&ma[i][j]<='8')                    ++ans;        printf("Case %d: %d\n",h,ans);    }}

/***然后我们又出不来题了***/开了C,K,J题,三题都有人过,但是都略难敲

FZU 1911

C构造题真的好水的,一定是我脑子抽风了,幸亏后来上了个厕所回来发现打的表的规律了,
感觉这种构造题比较像CF的风格(比赛上厕所很重要的!)

#include <iostream>#include <cstdio>#include <algorithm>#include <string>#include <cstring>#include <cmath>#define MAXN 2000010#define EPS 1e-6#define MP(x,y) make_pair((x),(y))#define FI first#define SE secondusing namespace std;void mul(int a[2][2],int b[2][2],int mod){    int tmp[2][2]={{0}};    for(int i=0;i<2;++i)        for(int j=0;j<2;++j)            for(int k=0;k<2;++k)                tmp[i][j]=(tmp[i][j]+a[i][k]*b[k][j])%mod;    for(int i=0;i<2;++i)        for(int j=0;j<2;++j)            a[i][j]=tmp[i][j];}void exp_mod(int ans[2][2],int p,int mod){    int a[2][2]={{0}};    a[0][0]=a[0][1]=a[1][0]=1;    for(int i=0;i<2;++i)        for(int j=0;j<2;++j)            ans[i][j]=0;    ans[0][0]=ans[1][1]=1;    while(p)    {        if(p&1) mul(ans,a,mod);        p>>=1;        mul(a,a,mod);    }}int main(){    //freopen("/home/moor/Code/input.txt","r",stdin);    int ncase,n, m;    scanf("%d",&ncase);    for(int h=1;h<=ncase;++h)    {        scanf("%d %d", &n, &m);        int tmpm[2][2]={{0}},tmp2[2][2];        tmpm[0][0]=tmpm[1][0]=1;        exp_mod(tmp2,n,m);        mul(tmp2,tmpm,m);        int l=(tmp2[0][0]-1+m)%m;        printf("Case %d: ",h);        if (l%2==0&&l!=0)        {            printf("Yes\n");            for (int i=1; i<=l/2; i++)            {                printf("-1");                for (int j=2; j<=l-i+1; j++)                    printf(" -1");                for (int j=l-i+2 ;j<=l; j++)                    printf(" 0");                printf("\n");            }            for (int i=1; i<=l/2; i++)            {                printf("0");                for (int j=2; j<=l/2-i+1; j++)                    printf(" 0");                for (int j=l/2-i+2; j<=l; j++)                    printf(" 1");                printf("\n");            }        }        else printf("No\n");    }    return 0;}
FZU 1919
K数学题+JAVA题
算k路归并排序的最坏时间式子写出来不难,难的是JAVA,我们要准备一本人民群众喜闻乐见的JAVA用书
先T了一炮是因为没用map(其实明明知道会T的,只是想刷刷存在感)
import java.text.Bidi;import java.util.*;import java.math.*;import java.io.*;public class Main {//int[] num = new int[500];static int cas,m;static BigInteger n,a;static TreeMap<BigInteger, BigInteger> ma=new TreeMap<BigInteger, BigInteger>();public static BigInteger solve(BigInteger x){if(ma.get(x)!=null)return ma.get(x);if(a.compareTo(x)>=0){BigInteger tmp=x;x=x.subtract(BigInteger.ONE).multiply(x).divide(BigInteger.valueOf(2));ma.put(tmp, x);return x;}else{BigInteger tmp = BigInteger.ZERO;if(x.mod(a).compareTo(BigInteger.ZERO)!=0)tmp=tmp.add(x.mod(a).multiply(solve(x.divide(a).add(BigInteger.ONE))));tmp=tmp.add(a.subtract(x.mod(a)).multiply(solve(x.divide(a))));tmp=tmp.add(x.mod(a).multiply(a.subtract(BigInteger.ONE)));tmp=tmp.add(a.subtract(BigInteger.ONE).multiply(x.divide(a).subtract(BigInteger.ONE)).multiply(a));tmp=tmp.add(BigInteger.valueOf(m*(m-1)/2));ma.put(x,tmp);return tmp;}} public static void main(String[] args){ Scanner cin = new Scanner (new BufferedInputStream(System.in));  cas = cin.nextInt(); for(int ca = 1; ca<=cas; ca++) { n = cin.nextBigInteger(); m = cin.nextInt(); a = BigInteger.valueOf(m); ma.clear(); System.out.printf("Case %d: ",ca); System.out.println(solve(n)); } }}

/*赛后过的题*/

FZU 1918
J计算几何Moor想试试,反正没有人敲题,所以我们队敲的第五题就是这道题==,
然后就没有然后了,赛后曹家浩他们队好像过了


原创粉丝点击