Codeforces Rounds #254 div2:A,B,C

A:

这是一道红果果的水题啊。。。。好坑爹。。。暴力一直不过。。。。WA了4遍呐。。。。。。时间过了1个小时后,打算用dfs写。。。浪费了好多脑细胞。。。大神2分钟就过了。。。我还要1个多小时才过。。。我还是太弱了。。。我是白痴。。。5555。。。今天一早知道了学姐的做法,奇行奇列和偶行偶列用B,其他的用W。。。。要是能想到果然很水。。。。哭晕在厕所惹。。。接下来俩种代码都贴一下吧。。。

//dfs
#include <stdio.h>
int n,m;
char a[105][105];
int limit(int x,int y)
{
    if(x>=0&&x<n&&y>=0&&y<m&&a[x][y]=='.')
        return 1;
    return 0;
}
void dfs(int x,int y)
{
    if(limit(x-1,y))
    {
        if(a[x][y]=='B')
            a[x-1][y]='W';
        else a[x-1][y]='B';
        dfs(x-1,y);
    }
    if(limit(x+1,y))
    {
        if(a[x][y]=='B')
            a[x+1][y]='W';
        else a[x+1][y]='B';
        dfs(x+1,y);
    }
    if(limit(x,y-1))
    {
        if(a[x][y]=='B')
            a[x][y-1]='W';
        else a[x][y-1]='B';
        dfs(x,y-1);
    }
    if(limit(x,y+1))
    {
        if(a[x][y]=='B')
            a[x][y+1]='W';
        else a[x][y+1]='B';
        dfs(x,y+1);
    }
}
int main()
{
    int i,j, ff;
    while(~scanf("%d%d%*c",&n,&m))
    {
        for(i=0;i<n;i++)
           gets(a[i]);
        for(i=0;i<n; i++)
            for(j=0;j<m; j++)
                if(a[i][j]=='.')
                {
                    a[i][j]='B';
                    dfs(i,j);
                }
        for(i=0;i<n;i++)
            puts(a[i]);
    }
    return 0;
}
//水过~~~代码亲测能过da~~
#include <stdio.h>
int main()
{
    int n,m, i,j;
    char a[105][105];
    while(~scanf("%d%d%*c",&n,&m))
    {
        for(i=0;i<n;i++)
           gets(a[i]);
        for(i=0;i<n; i++)
        {
            for(j=0;j<m; j++)
            {
                if(a[i][j]=='.')
                {
                if((i%2&&j%2)||(i%2==0&&j%2==0))
                    printf("B");
                else printf("W");
                }
                else printf("-");
            }
            printf("\n");
        }
    }
    return 0;
}

B:

用并查集做的,先找有几个没有连在一起的,总的减去它,就是有最多种的化学药品能混在一起,再用2的次方就能求出最大危险值。这只是我的理解,有什么错误请各位大神斧正~~~以下是代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>

int N,M;
int set[1005];
int temp;

int find(int x)
{
	return set[x]=(set[x]==x?x:find(set[x]));
}
void merge(int a,int b)
{
	for(int i=1;i<=N;i++)
	{
		int x=find(a),y=find(b);
		if(x!=y)
		{
			set[x]=y;
			temp--;
		}
	}
}

int main()
{
	while(~scanf("%d%d",&N,&M))
	{
		int a,b;
		temp=N-1;
		for(int j=1;j<=N;j++)
		{
			set[j]=j;
		}
		for(int i=1;i<=M;i++)
		{
			scanf("%d%d",&a,&b);
			merge(a,b);
		}
		printf("%.0lf\n",pow(2,N-temp-1));
	}
	return 0;
}

C:

C题真的要哭晕在厕所惹了啦~~~。。。草鸡大水题。。。。5555.就这么放过了。。。好讨厌啦。。。。。。主要是我英语渣。。。。不想看英语。英语和智商皆是硬伤啊。。。。。。说多了都是水啊。。。55555以下是代码

#include <cstdio>
#define N 517
double MAX(double a, double b)
{
	return a>b?a:b;
}
int main()
{
	int n, m;
	int x[N];
	int a, b, c;
	while(~scanf("%d%d",&n,&m))
	{
		int i, j;
		for(i = 1; i <= n; i++)
		{
			scanf("%d",&x[i]);
		}
		double max = 0, t;
		for(i = 1; i <= m; i++)
		{
			scanf("%d%d%d",&a,&b,&c);
			t =(double) (x[a]+x[b])/c;
			max = MAX(max, t);
		}
		printf("%.15f\n",max);
	}
	return 0;
}

Codeforces Rounds #254 div2:A,B,C

时间: 2024-10-10 19:14:49

Codeforces Rounds #254 div2:A,B,C的相关文章

Codeforces Round #254(div2)A

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

Codeforces Round #254(div2)B

就是看无向图有几个连通块,答案就是2n-num. 范围很小,就用矩阵来存图减少代码量. #include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #include<cmath> #include<map> #include<set> #include<vector> #include<algorithm> #inc

第六周周赛——AK机会不易得,好好把握题解(出自HDU5650,codeforces 616A,624A,659A,655A,658A)

A题: A题题目链接 题目描写叙述: 位运算 TimeLimit:1000MS  MemoryLimit:65536KB 64-bit integer IO format:%I64d Problem Description 已知一个包括 n 个元素的正整数集合S.设 f(S) 为集合S中全部元素的异或(XOR)的结果. 如:S={1,2,3}, 则 f(S) = 0. 给出集合S,你须要计算 将全部f(s)进行异或后的值, 这里 s?S. Input 多组測试数据.第一行包括一个整数T(T≤20

Codeforces 433C. Ryouko&#39;s Memory Note (中位数,瞎搞,思维)

题目链接: http://codeforces.com/problemset/problem/433/C 题意: 给你一堆数字,允许你修改相同的数字成为别的数字,也可以修改成自己,问你修改后相邻数字的距离的绝对值的和最小是多少. 思路: 首先明确一个结论,一个数轴上一些点,要求一个与他们距离之和尽量小的点,那么这个点就是这些点的中位数,即排序后位于中间的数. 这题的思路是把每一个数的与之相邻的保存下来,为了方便,可以用vector数组.然后为了使得距离之和最短,要取中位数.在一串数字中,距所有数

Codeforces Round #300 (A,B,C,D)

题目传送:Codeforces Round #300 A. Cutting Banner 思路:一看题就会错意了,然后一顿猛敲,果不其然的被hack了,然后才发现只需要剪中间那一段就可以了,然后又傻逼得少写一个等号,还是被hack了,心累啊 AC代码: #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> #include <cmath> #in

cf之路,1,Codeforces Round #345 (Div. 2)

 cf之路,1,Codeforces Round #345 (Div. 2) ps:昨天第一次参加cf比赛,比赛之前为了熟悉下cf比赛题目的难度.所以做了round#345连试试水的深浅.....       其实这个应该是昨天就写完的,不过没时间了,就留到了今天.. 地址:http://codeforces.com/contest/651/problem/A A. Joysticks time limit per test 1 second memory limit per test 256

codeforces 797 E. Array Queries【dp,暴力】

题目链接:codeforces 797 E. Array Queries   题意:给你一个长度为n的数组a,和q个询问,每次询问为(p,k),相应的把p转换为p+a[p]+k,直到p > n为止,求每次询问要转换的次数. 题解:纯暴力会TLE,所以在k为根号100000范围内dp打表 dp[i][j]表示初始p为i, k为j,需要转换几次可以大于n. 状态转移方程:dp[i][j] = dp[i+a[i]+j] + 1 #include <cstdio> #include <al

Codeforces 785 E. Anton and Permutation(分块,树状数组)

Codeforces 785 E. Anton and Permutation 题目大意:给出n,q.n代表有一个元素从1到n的数组(对应索引1~n),q表示有q个查询.每次查询给出两个数l,r,要求将索引为l,r的两个数交换位置,并给出交换后数组中的逆序对数. 思路:此题用到了分块的思想,即将这组数分为bsz块,在每一块上建Fenwick树,对于每次查询,只需要处理l,r中间的块和l,r所在块受影响的部分.具体实现见代码及注释. #include<iostream> #include<

Codeforces 55D. Beautiful numbers(数位DP,离散化)

Codeforces 55D. Beautiful numbers 题意 求[L,R]区间内有多少个数满足:该数能被其每一位数字都整除(如12,24,15等). 思路 一开始以为是数位DP的水题,觉得只需要记录搜到当前位出现了哪些数字作为状态即可,明显是假算法...感觉这是一道数位DP好题.可以这样思考:一个数要想被其各位数字分别都整除,等价于它被那些数字的LCM整除.因此记录当前位,当前数对(1~9的LCM)取模的结果,当前出现的数字的LCM这三个值作为状态才合理,即dp[pos][sum][