5.1 training 2 (5.1) 总结

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 5Y
0:27:40:TLE,用了cin,cout忘记改回来了
0:30:10:WA
1:06:47:TLE,补了一个坑,结果死循环了
1:08:48:WA,找到死循环的地方了,改了就交了==,中间竟然就隔了两分钟,速度好快的说
1:19:16:AC,Moor出了组数据找到了坑
好吧,其实这道题还是可以少点罚时的
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <string>
#include <cstring>
#define MAXN 500010
using 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 1Y
Moor卡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 second
using 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 second
using 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想试试,反正没有人敲题,所以我们队敲的第五题就是这道题==,
然后就没有然后了,赛后曹家浩他们队好像过了


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值