签到 2016.5.10

1、HDU 5670 Machine

解题思路:

变化的规律为红 -> 绿 -> 蓝 -> 红

将红、绿、蓝分别表示0、1、2

原问题就转化为求 n 的三进制表示的最低的 m
位,即求n
mod 3^m??的三进制表示

复杂度 O(m)

#include <iostream>
#include <cstdio>

using namespace std;

typedef long long LL;

const int maxn = 30 + 5;
char s[maxn];

int m;
LL n;

int main()
{
//    freopen("in.txt", "r", stdin);
    int T;
    while (scanf("%d", &T) != EOF) {
        while (T--) {
            cin>>m>>n;
            for (int i=0; i<m; ++i) {
                s[i] = 'R';
            }
            LL x = n%3;
            LL y = n/3;
            for (int i=m-1; i>=0; --i) {
                if (x == 1) {
                    s[i] = 'G';
                } else if (x == 2) {
                    s[i] = 'B';
                }
                if (y == 0) {
                    break;
                }
                x = y%3;
                y /= 3;
            }
            for (int i=0; i<m; ++i) {
                cout<<s[i];
            }
            cout<<endl;
        }
    }
    return 0;
}

2、HDU 5671 Matrix

解题思路:

暴力肯定是不可行的

可以用两个数组记录行和列交换的操作

再用两个数组记录行和列加一个数的操作

复杂度 O(mn + q)

#include <iostream>
#include <cstdio>
#include <cstring>

using namespace std;

const int maxn = 1000 + 10;
int Matrix[maxn][maxn];
int row[maxn], row_add[maxn];       //行
int column[maxn], column_add[maxn]; //列

int main()
{
//    freopen("in.txt", "r", stdin);
    int T;

    while (scanf("%d", &T) != EOF) {
        while (T--) {
            int n, m, q;
            scanf("%d%d%d", &n, &m, &q);
            for (int i=1; i<=n; ++i) {
                for (int j=1; j<=m; ++j) {
                    scanf("%d", &Matrix[i][j]);
                }
            }
            int a, x, y;
            memset(row_add, 0, sizeof(row_add));
            memset(column_add, 0, sizeof(column_add));
            for (int i=1; i<=n; ++i) {
                row[i] = i;
            }
            for (int i=1; i<=m; ++i) {
                column[i] = i;
            }
            for (int i=0; i<q; ++i) {
                scanf("%d%d%d", &a, &x, &y);
                if (a == 1) {
                    int t = row[x];
                    row[x] = row[y];
                    row[y] = t;
                } else if (a == 2) {
                    int t = column[x];
                    column[x] = column[y];
                    column[y] = t;
                } else if (a == 3) {
                    row_add[row[x]] += y;
                } else {
                    column_add[column[x]] += y;
                }
            }
            int t;
            for (int i=1; i<=n; ++i) {
                for (int j=1; j<m; ++j) {
                    t = Matrix[row[i]][column[j]] + row_add[row[i]] + column_add[column[j]];
                    printf("%d ", t);
                }
                t = Matrix[row[i]][column[m]] + row_add[row[i]] + column_add[column[m]];
                printf("%d\n", t);
            }
        }
    }
    return 0;
}

3、HDU 5675 ztr loves math

题意:

是否存在正整数 x 和 y,满足 n = x^2 - y^2 (n 为正整数)

解题思路:

据说这次 BC 出现很多问题(导致unrated)所以肯定不知道哪里有毒

一:

n = x^2 - y^2 = (x+y) * (x-y)

令 a = x+y; b = x-y;

那么 n = a*b; x = (a+b) / 2; y = (a-b) / 2;

所以 (a-b) != 0 && (a-b) %2 == 0 时有解

复杂度O(sqrt(n))

以为会TLE,没想到358MS过了

二:

假设存在解时 y = x+i; n = (x+i)^2 - x^2;

那么 n = 2xi + i^2;

i = 1时,n = 2x + 1;

i = 2时,n = 4x + 4;

容易得出结论,当 n 不等于 1 && n 不等于 4 && n 为奇数或者 4 的倍数时,方程一定有正整数解

#include <iostream>
#include <cstdio>
#include <cmath>

using namespace std;

typedef long long LL;

int main()
{
//    freopen("in.txt", "r", stdin);
    int T;
    scanf("%d", &T);
    while (T--) {
        LL n;
        scanf("%I64d", &n);
		bool flag = false;
		int t = (int)sqrt(n);
		for (int i=1; i<=t; ++i) {
			if (n%i == 0) {
				LL a = i;
				LL b = n / i;
				if ((a-b) != 0 && (a-b)%2 == 0) {
//                            cout<<a<<" "<<b<<endl;
					flag = true;
					break;
				}
			}
		}
		if (flag) {
			printf("True\n");
		} else {
			printf("False\n");
		}
    }
    return 0;
}
#include <iostream>
#include <cstdio>
#include <cmath>

using namespace std;

typedef long long LL;

int main()
{
//    freopen("in.txt", "r", stdin);
    int T;
    scanf("%d", &T);
    while (T--) {
        LL n;
        scanf("%I64d", &n);
        if (n != 1 && n != 4 && (n%2 != 0 || n%4 == 0)) {
            printf("True\n");
        } else {
            printf("False\n");
        }
    }
    return 0;
}

4、CodeForces_673A Bear and Game

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <algorithm>
#include <queue>

using namespace std;

typedef long long LL;

const int maxn = 100;
int t[maxn];

int main()
{
#ifdef __AiR_H
    freopen("in.txt", "r", stdin);
#endif // __AiR_H
    int n;
    scanf("%d", &n);
    t[0] = 0;
    for (int i = 1; i <= n; ++i) {
        scanf("%d", &t[i]);
    }
    ++n;
    t[n] = 90;
    bool flag = false;
    for (int i = 1; i <= n; ++i) {
        if (t[i] - t[i-1] > 15) {
            flag = true;
            printf("%d\n", t[i-1] + 15);
            break;
        }
    }
    if (!flag) {
        printf("90\n");
    }
    return 0;
}

5、CodeForces_673B Problems for Round

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <algorithm>
#include <queue>
#include <vector>

using namespace std;

typedef long long LL;

const int maxn = 1e5 + 10;

vector<int> Div1, Div2;

int main()
{
    int n, m;
    scanf("%d%d", &n, &m);
    int u, v;
    for (int i = 0; i < m; ++i) {
        scanf("%d%d", &u, &v);
        if (u < v) {
            swap(u, v);
        }
        Div1.push_back(u);
        Div2.push_back(v);
    }
    if (m == 0) {
        printf("%d\n", n-1);
    } else {
        int a = *max_element(Div2.begin(), Div2.end());
        int b = *min_element(Div1.begin(), Div1.end());
        printf("%d\n", max(0, b-a));
    }
    return 0;
}
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <algorithm>
#include <queue>
#include <vector>

using namespace std;

typedef long long LL;

const int maxn = 1e5 + 10;

int main()
{
#ifdef __AiR_H
    freopen("in.txt", "r", stdin);
#endif // __AiR_H
    int n, m;
    scanf("%d%d", &n, &m);
    int u, v;
    int div2_Max = 1, div1_Min = n;
    for (int i = 0; i < m; ++i) {
        scanf("%d%d", &u, &v);
        if (u < v) {
            swap(u, v);
        }
        div1_Min = min(div1_Min, u);
        div2_Max = max(div2_Max, v);
    }
    if (m == 0) {
        printf("%d\n", n-1);
    } else {
        printf("%d\n", max(0, div1_Min - div2_Max));
    }
    return 0;
}
时间: 2024-11-25 10:56:35

签到 2016.5.10的相关文章

【读书笔记】2016.12.10 《构建高性能Web站点》

本文地址 分享提纲: 1. 概述 2. 知识点 3. 待整理点 4. 参考文档 1. 概述 1.1)[该书信息] <构建高性能Web站点>: -- 百度百科 -- 本书目录: 第1章 绪论 1.1 等待的真相 1.2 瓶颈在哪里 1.3 增加带宽 1.4 减少网页中的HTTP请求 1.5 加快服务器脚本计算速度 1.6 使用动态内容缓存 1.7 使用数据缓存 1.8 将动态内容静态化 1.9 更换Web服务器软件 1.10 页面组件分离 1.11 合理部署服务器 1.12 使用负载均衡 1.1

武汉北大青鸟解读2016年10大IT热门岗位

武汉北大青鸟解读2016年10大IT热门岗位 2016年1月5日 13:37 北大青鸟 这是IT从业者的辉煌时代,IT行业的失业率正处在历史的低点,而且有的岗位——例如网络和安全工程师以及软件开发人员——甚至出现徘徊在1%的失业率.最新调查显示,81%的IT领导者表示很难找到IT人才.即使你不是安全专家也不是软件开发人员,依然也有大量的就业机会.下面武汉北大青鸟徐东校区为你介绍2016年10个热门的IT技能,这些技能是由在IT人力咨询公司Mondo,自由职业者和签约市场Upwork,以及IT教育

2016年10个最热门 IT 职业岗位

北京尚学堂提供 IT时代已经开启.下面就是2016年需求最高的这10项技术. 这是IT从业者的辉煌时代.IT行业的失业率正处在历史的低点,而且有的岗位——例如网络和安全工程师以及软件开发人员——甚至出现徘徊在1%的失业率.根据最近的TEKsystems调查,81%的IT领导者表示很难找到IT人才. 即使你不是安全专家也不是软件开发人员,依然也有大量的就业机会.下面我们要介绍2016年10个热门的IT技能,这些技能是由在IT人力咨询公司Mondo,自由职业者和签约市场Upwork,以及IT教育和培

2016年10月数据库流行度排行榜

DB-Engines Ranking发布了2016年10月最新数据库流行度排行: db趋势

Murano Weekly Meeting 2016.05.10

Meeting time: 2016.May.10 1:00~2:00 Chairperson:  Serg Melikyan, from Mirantis Meeting summary: 1. murano contributors rules Six usage rule: use it only when really necessary (for example if existing code will now work in Py3 at all. If it is a matte

海豚驾考2016年10月8日系统升级公告

海豚驾考2016年10月8日系统升级公告 功能概述: 1.学员报名支付成功后 2.相关人员登陆后台为学员指派一个教练(后面系统完善后,由系统自动指派) 3.在后台[教练列表页]可以查看所有教练各个阶段下的学员人数 4.教练在微信端个人中心页,进入[我的学员]列表页,可以查看各个阶段下的学员 5.教练根据学员的阶段,安排学员学习(包括准备资料.科目一.科目二.... 直到拿本) 6.教练可以在微信上给学员约车(以及取消预约).设置学员的进度 1.微信 - 教练端个人中心页升级(查看我的学员 ->

2016年10月10日--穷举、迭代、while循环

穷举 将所有可能性全部全部走一遍,使用IF筛选出满足的情况 练习: 1.单位给发了一张150元购物卡, 拿着到超市买三类洗化用品. 洗发水15元,香皂2元,牙刷5元. 求刚好花完150元,有多少种买法, 没种买法都是各买几样? int i = 0; int j = 0; for (int x = 0; x <= 10; x++) { for (int y = 0; y <= 30; y++) { for (int z = 0; z <= 75; z++) { j++; if (x * 1

2016.6.10 考试总结

汽艇(Boat.cpp/c/pas) [问题描述] 有 n 个人要去坐 1 汽艇,每个人单独坐汽艇的快乐程度是 Ci,每多一个人,他的快乐程度会减去 Di,请求出使快乐程度之和达到最大的方案.(假设汽艇的容量足够大). [输入格式] 输入文件共有 3 行: 第1 行是一个整数 n: 第2 行有n 个整数,依次表示每个人单独坐汽艇的快乐程度 Ci(1<=Ci<=10000): 第3 行有n 个整数,依次表示每多 1 人,每个人快乐程度的下降值 Di(1<=Di<=10). [输出格式

2016/1/10 实例 1,控制台 输入人数 2,控制台 输入对应人数的成绩 3,求成绩总和以及最大值 最小值 平均值

1 import java.util.Scanner; 2 3 4 public class KongZhitai { 5 6 7 public static void main(String[] args) { 8 // TODO 自动生成的方法存根 9 10 //第一步 输出 扫描 接收 人数 11 int number=0; //定义变量 12 System.out.println("请输入人数:"); 13 Scanner arr=new Scanner(System.in);