Codeforces B. PIN Codes(暴力)

传送门

题意:

t组数据,每组n个四位数,目的是改变最小的次数,使得n个数各不相同

思路:

看这个数据:2<=n<=10,因此发现重复的,暴力改变千位的值,如果改变后的数,没出现过,则break,一共十个数,for(0-9)改变千位,肯定能找的

代码:

#include <iostream>
#include <stdio.h>
#include <algorithm>
#include <string.h>
#include <vector>
#include <math.h>
#include <map>
#include <queue>
#include <set>
using namespace std;
typedef long long ll;
const int N=2e6+50;
const int mod=1e9+7;
int a[N];
map<int,int>mp;
void solve(int t)
{
    int n;scanf("%d",&n);
    mp.clear();
    for(int i=1;i<=n;i++)
        scanf("%d",&a[i]),mp[a[i]]++;
    int ans=0;
    for(int i=1;i<=n;i++){
        if(mp[a[i]]>1)//大于1说明有重复的
        {
            ans++;
            mp[a[i]]--;
            int x=a[i]-(a[i]/1000)*1000;//该数去掉千位剩的值,例a[i]=2345,x=345
            for(int j=0;j<=9;j++)
            {
                int p=x+j*1000;
                if(mp[p]==0)
                {
                    a[i]=p;
                    mp[p]++;
                    break;
                }
            }
        }

    }
    printf("%d\n", ans);
    for(int i=1;i<=n;i++)
        printf("%04d\n",a[i] );
}
int main()
{
    //freopen("in.txt","r",stdin);
    int t;
    scanf("%d",&t);for(int i=1;i<=t;i++)solve(i);
    return 0;
}
 

原文地址:https://www.cnblogs.com/zzl-dreamfly/p/11965720.html

时间: 2024-10-12 06:39:08

Codeforces B. PIN Codes(暴力)的相关文章

Codeforces Round #603 (Div. 2) B. PIN Codes

链接: https://codeforces.com/contest/1263/problem/B 题意: A PIN code is a string that consists of exactly 4 digits. Examples of possible PIN codes: 7013, 0000 and 0990. Please note that the PIN code can begin with any digit, even with 0. Polycarp has n (

Codeforces 57C Array dp暴力找规律

题目链接:点击打开链接 先是计算非递增的方案, 若非递增的方案数为x, 则非递减的方案数也是x 答案就是 2*x - n 只需求得x即可. 可以先写个n3的dp,然后发现规律是 C(n-1, 2*n-1) 然后套个逆元即可. #include<iostream> #include<cstdio> #include<vector> #include<string.h> using namespace std; #define ll long long #def

Codeforces 57B Martian Architecture 暴力||线段树

题目链接:点击打开链接 题意:n长的序列(初始全为0) m个操作 k个查询 下面m个操作[l,r] h 代表 a[l] +=h; a[l+1] += h+i; a[l+i] += h+i;  l<=i<=r 然后问k个位置的和 因为k<=100 所以直接暴力也可以 ----------------------- 如果k<=100000 也是可以做的 只需要给区间记录一个标记lazy,表示从左端点开始 l, l+1, l+i ··· l+r 而向下更新时, 左区间则直接更新, 右区间

codeforces 724B Batch Sort(暴力-列交换一次每行交换一次)

题目链接:http://codeforces.com/problemset/problem/724/B 题目大意: 给出N*M矩阵,对于该矩阵有两种操作: (保证,每行输入的数是 1-m 之间的数且不重复) 1.交换两列,对于整个矩阵只能操作一次 2.每行交换两个数. 交换后是否可以使每行都是1-m 数字递增. 解题思路: 1.得到矩阵后先判断,是否每行可以交换两个数可以得到递增的矩阵,如果可以则输出“YES”. 2.暴力交换两列,交换两列后,判断每行是否可以交换两个数得到递增的矩阵,如果可以则

[codeforces 200 A Cinema]暴力,优化

题意大致是这样的:有一个有n行.每行m个格子的矩形,每次往指定格子里填石子,如果指定格子里已经填过了,则找到与其曼哈顿距离最小的格子,然后填进去,有多个的时候依次按x.y从小到大排序然后取最小的.输出每次填的格子的坐标. 思路:这道题出自Codeforces Round #126 (Div. 2)是个暴力优化的题.如果指定格子未填,则填到里面.否则枚举曼哈顿距离,然后枚举格子找答案.裸的暴力太慢了,主要是因为每次曼哈顿距离都是从1开始搜索,如果每次指定的坐标都是同一个,则做了大量的重复工作.不妨

codeforces 897A Scarborough Fair 暴力签到

codeforces 897A Scarborough Fair 题目链接: http://codeforces.com/problemset/problem/897/A 思路: 暴力大法好 代码: #include <iostream> #include <stdio.h> #include <string.h> using namespace std; typedef long long ll; int n,m; string s; int main() { ios

CodeForces 589B Layer Cake (暴力)

题意:给定 n 个矩形是a*b的,问你把每一块都分成一样的,然后全放一块,高度都是1,体积最大是多少. 析:这个题,当时并没有完全读懂题意,而且也不怎么会做,没想到就是一个暴力,先排序,先从大的开始选,如果大,那么数量少,如果小,数量就多, 用一个multiset来排序,这样时间复杂度会低一点,每一个都算一下比它的大矩阵的数量,然后算体积,不断更新,最大值. 代码如下: #pragma comment(linker, "/STACK:1024000000,1024000000") #i

CodeForces 398A Cards 贪心 暴力 瞎搞

搞了一晚上了快,各种YY乱搞啊,终于过了,一开始YY的都是错的,觉得 这道题目a,b的范围都是10^5,那就暴力枚举b被分成了几份,然后再继续YY,只用一个o去分隔x,这样最后剩下的o再集中在一起,也就是x的份数总是比o的份数多一份,也就是尽可能把x分开,尽可能把o集中在一块,前面都把x分开了,一个o分开两份x,后面还能有一大堆的o在一起,这样就满足了,然后又出错了,因为分成几份,有余数的,比如b = 6,你要分成4份,我以开始是分成 1  1  1  3这样子,这样不行,应该分成 1 1 2

Codeforces 831C--Jury Marks (暴力)

题目链接:http://codeforces.com/problemset/problem/831/C 题意:有一位参赛选手,我们不知道他初始或最后的成绩,但是知道k次评审所加(减)的分数,以及n个在这过程中的他的分数.问这名选手初始分有几种情况. 思路:一开始考虑先求出评审分的前缀和,对过程分减去前缀和就能得到的初始分数,求出所有的初始分数情况,用map记录每个初始分重复的次数,重复次数==n 的即为正确的初始分. 然而这么做是WA了的. 分析第一个样例: 4 1-5 5 0 2010 如果按