几道cf水题

题意:给你包含n个元素的数组和k种元素,要求k种元素要用完,并且每种颜色至少用一次,n个元素,如果某几个元素的值相同,这些个元素也不能染成同一种元素。

思路:如果元素个数n小于k或者值相同的元素的个数大于k,那么一定无解,输出-1。用一个num[a[i]]记录每种相同值的元素出现次数,若大于k,无解。这道题的关键在于如何处理值相同的这些元素,可以用一个二维数组f[i][j]来表示状态,其中i表示对应元素值,j代表颜色。只要对于相同的i,j值不同就可以了。每个元素用什么颜色记录在一个数组ans[i]中,最后输出ans[i]就可以了。

Array K-Coloring 

#include<iostream>
#include<cstdio>
#include<string.h>
#define maxn 5005
using namespace std;
int n,k,flag=0;
int cnt=1;
int a[maxn];
int ans[maxn];
int num[maxn]={0};
int vis[maxn][maxn];
int main()
{
    cin>>n>>k;
    memset(vis,0,sizeof(vis));
    for(int i=0;i<n;i++)
    {
    cin>>a[i];
    num[a[i]]++;
    if(num[a[i]]>k)
    flag=1;
    }
    if(n<k||flag)
    cout<<"NO";
    else
    {
           cout<<"YES"<<endl;
           for(int i=0;i<n;i++)
           {
               if(cnt<=k)
               {
                   ans[i]=cnt;
                   vis[cnt][a[i]]=1;
                   cnt++;
               }
               else
               {
                     for(int j=1;j<=k;j++)
                     {
                         if(!vis[j][a[i]])
                         {
                             ans[i]=j;
                             vis[j][a[i]]=1;
                             break;
                         }
                     }
               }
           }
           for(int i=0;i<n;i++)
           printf("%d ",ans[i]);
    }
    return 0;
}

题意:这里有n个门,它们的初始耐劳度为a[i]。你每次能对门造成x的破坏,修理工能每次使门回复y的牢固度。你和修理工都采用最优策略,请问10的100次轮后你能破坏掉多少门。

思路:你的最优策略是每次先打掉牢固度低于你破坏力的门,修理工的最优策略是每次先修牢固度低于你破坏力的门。那么如果x>y的话,这种情况下最坏的情形是x-y仅仅相差1,每扇门牢固度都是10^5,共有100扇门,这样100*10^5也远远比10^100小,则最后你一定能破坏所有门。相反若x<=y,你只能破坏掉最初牢固度小于你破坏力的门cnt,数量为(cnt+1)/2.当这些门破坏后,剩下的门你破坏哪个,修理工就修理哪一个,最后也破坏不了一扇门

#include<iostream>
#include<stdio.h>

using namespace std;

int cnt=0;
int n,x,y;
int a[105];

int main()
{
    cin>>n>>x>>y;
    for(int i=1;i<=n;i++)
    {
        cin>>a[i];
        if(a[i]<=x)
        cnt++;
    }
    if(x>y)
    cout<<n;
    if(x<=y)
    cout<<(cnt+1)/2;
    return  0;
 } 

原文地址:https://www.cnblogs.com/rainyskywx/p/10289605.html

时间: 2024-10-10 12:29:50

几道cf水题的相关文章

某5道CF水题

1.PolandBall and Hypothesis 题面在这里! 大意就是让你找一个m使得n*m+1是一个合数. 首先对于1和2可以特判,是1输出3,是2输出4. 然后对于其他所有的n,我们都可以非常快的找到一个最小的与它互质的质数p(考虑反证法),并且满足p<n. 这样就相当与解一个同余方程 n*m = p-1 (mod p) , 解出的m可以保证 n*m+1 是 p 的倍数,也就是合数了. 又因为gcd(p,n)==1,所以这个方程肯定有解,直接求一个 n 在mod p意义下的逆元然后乘

一道cf水题再加两道紫薯题的感悟

1. 遇到一个很大的数除以另一个数时,可以尝试把这个很大的数进行,素数因子分解. 2. 遇到多个数的乘积与另一个数的除法时,求是否能整除,可以先求每一个数与分母的最大公约数,最后若分母数字为1,则证明可整除.或者把分子上的每个数进行素数因子分解,分母上的数也进行素数因子分解,若分子上的与分母上相同素数因子进行比较,分子上的素数因子指数大于分母位置上的,则证明可整除. 3. 遇到乘法的时候注意越界问题. 4. 遇到求某一个区间内,满足某一特征的数的个数,而这个特征与因子,约数有关,尝试用埃筛的方法

CODEVS1163访问艺术馆(第一道大师水题)

题目描述 Description 皮尔是一个出了名的盗画者,他经过数月的精心准备,打算到艺术馆盗画.艺术馆的结构,每条走廊要么分叉为二条走廊,要么通向一个展览室.皮尔知道每个展室里藏画的数量,并且他精确地测量了通过每条走廊的时间,由于经验老道,他拿下一副画需要5秒的时间.你的任务是设计一个程序,计算在警察赶来之前(警察到达时皮尔回到了入口也算),他最多能偷到多少幅画. 输入描述 Input Description 第1行是警察赶到得时间,以s为单位.第2行描述了艺术馆得结构,是一串非负整数,成对

一道cf水题

题意:输入数字n表示字符串中元素个数,字符串中只含有RGB三个字符,现在要求任意两个相同的字符他们的下标之差能整除3. 思路:任意两个相同的字符的下标能整除3,也就是任意三个为一组的字符串当中的字符不能相同,那么只要某一组字符确定了,那么字符串中所有字符也就确定了,我们不妨来枚举前三个字符可能的排列,只要第一组确定了,后面也就全部确定了(当时自己去字符串里面找第一个不重复的三个字符组不就是这个意思么).接下来第一组确定后,由于后面所有的字符都和它相同,所以我们只需要遍历一遍统计后面与他不对应的字

在cf水题の记录

CF1158C 题意:有排列p, 令\(nxt_i\)为\(p_i\)右侧第一个大于\(p_i\)的数的位置,若不存在则\(nxt_i=n+1\) 现在整个p和nxt的一部分丢失了,请根据剩余的nxt,构造出一个符合情况的p,输出任意一解. 使有解的充要条件是对于每一个i不存在\(j\in(i,nex_i)\)满足\(nex_j>nex_i\) 也就是说对于每个\(i\)向\(nxt_i\)连一条边,然后没有两条边相交 对于点\(i\)向\(nex_i\)和满足\(j<i \ \wedge n

刷了500道水题是什么体验?

并没有什么卵用. 我马上大二了,大一两学期目测切了1000道水题了,毫无意义. 至今不理解kmp和后缀数组,只会模板.数论和博弈论是什么?能吃吗?只会打表.图论至今不会tarjan,话说dlx是什么?插头dp,这是什么?数据结构还好,经常做高中生的题,可持久化可持久化线段树也能花一下午时间写出来,然而并不会考. 平时做题只刷水题,遇到难题的时候,随手搜题解,看了看,哇,这居然能这么搞!然后抄一遍别人代码,交上去ac. cf一年几乎没缺过,花了大一上半年时间才滚上div1.然而至今紫号一堆,黄名一

大数--几道水题,用来学学JAVA

几道水题,练习一下JAVA写大数 poj2305  Basic remains 大数可以直接用非十进制读入,读入的数在变量中是十进制的 输出的时候要先用BigInteger的toString方法转换为相应的进制 1 import java.math.*; 2 import java.util.*; 3 class Main 4 { 5 public static void main(String[] args) 6 { 7 Scanner cin = new Scanner(System.in)

POJ百道水题列表

以下是poj百道水题,新手可以考虑从这里刷起 搜索1002 Fire Net1004 Anagrams by Stack1005 Jugs1008 Gnome Tetravex1091 Knight Moves1101 Gamblers1204 Additive equations 1221 Risk1230 Legendary Pokemon1249 Pushing Boxes 1364 Machine Schedule1368 BOAT1406 Jungle Roads1411 Annive

CF 628A --- Tennis Tournament --- 水题

CF 628A 题目大意:给定n,b,p,其中n为进行比赛的人数,b为每场进行比赛的每一位运动员需要的水的数量, p为整个赛程提供给每位运动员的毛巾数量, 每次在剩余的n人数中,挑选2^k=m(m <=n)个人进行比赛,剩余的n-m个人直接晋级, 直至只剩一人为止,问总共需要的水的数量和毛巾的数量 解题思路:毛巾数很简单: n*p即可 水的数量:1,2,4,8,16,32,64,128,256,512,提前打成一个表, 根据当前剩余的人数n在表中二分查找最大的小于等于n的数,结果即为本次进行比赛