第一次寒假集训

Problem Description
集训进行了将近2个礼拜,这段时间以恢复性训练为主,我一直在密切关注大家的训练情况,目前为止,对大家的表现相当满意,首先是绝大部分队员的训练积极性很高,其次,都很遵守集训纪律,最后,老队员也起到了很好的带头作用,这里特别感谢为这次DP专题练习赛提供题目和测试数据的集训队队长xhd同学.

特别高兴的是,跟随集训队训练的一批新队员表现非常好,进步也比较显著,特别是训练态度大大超出我的预期,我敢说,如果各位能如此坚持下去,绝对前途无量!

考虑到新队员还没有经过系统训练,我这里特别添加一道简单题:
给定三个正整数A,B和C(A,B,C<=1000000),求A^B mod C的结果.

希望各位都能体会到比赛中AC的快乐,绝对的量身定制,很高的待遇哟,呵呵...

Input
输入数据首先包含一个正整数N,表示测试实例的个数,然后是N行数据,每行包括三个正整数A,B,C。

Output
对每个测试实例请输出计算后的结果,每个实例的输出占一行。

Sample Input
3 2 3 4 3 3 5 4 4 6

Sample Output
0 2 4

考查的是快速幂取模。
ABC数据较大,定义为long long型,数据过大,易溢出,将大数据转化为小数据,加快运算速度。

#include<iostream>
using namespace std;
int main()
{
    int n;
    scanf_s("%d", &n);
    while (n--)
    {
        long long A,B,C;
        cin >> A >> B >> C;
        A = A % C;
        long long h = 1;
        while (B > 0)
        {
            if (B % 2 == 1)
                h = (h*A) %B;
            B = B / 2;
            A = (A*A) % B;
        }
        cout<<h%C;
    }
    return 0;
}

Farmer John knows that an intellectually satisfied cow is a happy cow who will give more milk. He has arranged a brainy activity for cows in which they manipulate an M × N grid (1 ≤ M ≤ 15; 1 ≤ N ≤ 15) of square tiles, each of which is colored black on one side and white on the other side.

As one would guess, when a single white tile is flipped, it changes to black; when a single black tile is flipped, it changes to white. The cows are rewarded when they flip the tiles so that each tile has the white side face up. However, the cows have rather large hooves and when they try to flip a certain tile, they also flip all the adjacent tiles (tiles that share a full edge with the flipped tile). Since the flips are tiring, the cows want to minimize the number of flips they have to make.

Help the cows determine the minimum number of flips required, and the locations to flip to achieve that minimum. If there are multiple ways to achieve the task with the minimum amount of flips, return the one with the least lexicographical ordering in the output when considered as a string. If the task is impossible, print one line with the word "IMPOSSIBLE".

Input
Line 1: Two space-separated integers: M and N
Lines 2.. M+1: Line i+1 describes the colors (left to right) of row i of the grid with N space-separated integers which are 1 for black and 0 for white
Output
Lines 1.. M: Each line contains N space-separated integers, each specifying how many times to flip that particular location.
Sample Input
4 4
1 0 0 1
0 1 1 0
0 1 1 0
1 0 0 1
Sample Output
0 0 0 0
1 0 0 1
1 0 0 1
0 0 0 0
题意:
牛翻转瓷砖,翻转一块瓷砖,这块瓷砖的上下左右都会翻转,求牛最少翻转多少次可以让瓷砖全是白色,并输出翻转次数最少的情况下对应的每块瓷砖翻转的次数。
枚举出每一行瓷砖翻转的情况,求最优解。第一行确定了的话第二行也会确定下来,因为第一行某一个的上左右都确定下来了,所以面下也会确定,所以可以通过第一行推出之后的所有。

#include <iostream>
using namespace std;
#define INF 0x3f3f3f3f //无穷大
int n, m;
int a[20][20];
int f[20][20];
int ans[20][20];

int vx[] = { 0,-1,0,0 };
int vy[] = { 0,0,-1,1 };//瓷砖状态

bool check(int x, int y)
{
    return x >= 0 && y >= 0 && x < n && y < m;
}
int get(int x, int y) 
{
    int ret = a[x][y];
    for (int i = 0;i < 4;i++) 
    {
        int tx = x + vx[i];
        int ty = y + vy[i];
        if (check(tx, ty))
            ret += f[tx][ty];
    }

    return ret & 1;
}
int dfs(int k) 
{
    if (k == n - 1) 
    {
        for (int i = 0;i < m;i++)
            if (get(n - 1, i))
                return INF;
        int ret = 0;
        for (int i = 0;i < n;i++)
            for (int j = 0;j < m;j++)
                ret += f[i][j];
        return ret;
    }
    for (int i = 0;i < m;i++)
        f[k + 1][i] = get(k, i);
    return dfs(k + 1);
}
int main() 
{
    cin >> n >> m;;
    for (int i = 0;i < n;i++)
        for (int j = 0;j < m;j++)
            cin>>a[i][j];
    int max = 1 << m;
    int sum = INF;
    memset(ans, 0, sizeof(ans));
    for (int i = 0;i < max;i++)
    {
        int temp = i;
        memset(f, 0, sizeof(f));
        for (int j = m - 1;j >= 0;j--) 
        {
            f[0][j] = temp & 1;
            temp >>= 1;
        }
        int com = dfs(0);
        if (com < sum) 
        {
            sum = com;
            memcpy(ans, f, sizeof(f));
        }
    }
    if (sum == INF)
    {
        printf("IMPOSSIBLE\n");
        return 0;
    }
    for (int i = 0;i < n;i++) 
    {
        cout<<ans[i][0];
        for (int j = 1;j < m;j++)
            cout<< ans[i][j];
        cout<<endl;
    }
    return 0;
}

Given a positive integer n, write a program to find out a nonzero multiple m of n whose decimal representation contains only the digits 0 and 1. You may assume that n is not greater than 200 and there is a corresponding m containing no more than 100 decimal digits.
Input
The input file may contain multiple test cases. Each line contains a value of n (1 <= n <= 200). A line containing a zero terminates the input.
Output
For each value of n in the input print a line containing the corresponding value of m. The decimal representation of m must not contain more than 100 digits. If there are multiple solutions for a given value of n, any one of them is acceptable.
Sample Input
2
6
19
0
Sample Output
10
100100100100100100
111111111111111111

题意:找出任意一个由0和1组成的数,而且是n的倍数。
深度搜索DFS
x * 10,或者x * 10+1,。

#include<iostream>
#include<cstdio>
using namespace std;
bool f;
int n;
void dfs(unsigned long long x, int n, int k) 
{
    if (f) return;
    if (x%n == 0) 
    {
        cout<<x;
        f = true;
        return;
    }
    if (k == 19) return;
    dfs(x * 10, n, k + 1);
    dfs(x * 10 + 1, n, k + 1);
}

int main()
{
    while (cin>>n) 
    {
        if (n == 0) break;
        f = false;
        dfs(1, n, 0);
    }
    return 0;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,723评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,003评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,512评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,825评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,874评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,841评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,812评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,582评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,033评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,309评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,450评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,158评论 5 341
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,789评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,409评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,609评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,440评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,357评论 2 352

推荐阅读更多精彩内容

  • rljs by sennchi Timeline of History Part One The Cognitiv...
    sennchi阅读 7,322评论 0 10
  • 夜雨拍打冬的屋檐, 哽咽、连绵、无所顾忌, 努力以凝结水的姿态做最后一次坠落, 急促、忘我、酣畅淋漓。 像一切的自...
    无为何事阅读 318评论 0 5
  • 图1: 小椅子是儿子在家坐的小木椅,因为他属马,又活泼好动,所以联想用马腿置换了椅子腿;椅子背面3根柱子用了异质同...
    若辰读书阅读 1,712评论 4 1
  • 一到饭点,路面各种小摊都出来了。感觉好久都没有经历过在路边摊买东西吃的时候了,因为现在有了外卖,有了快递。是有多久...
    身体棒棒阅读 167评论 0 4