UVALive 2521 Game Prediction 题解

  这个我上来把题目理解错了,我以为所有人的牌都是一样的,感觉这个题太麻烦了吧,而且题目样例过不去啊……后来发现理解错了,给出的数据是他一个人的数据,就是让我们求他一定能赢的轮数,所有的牌是固定的(1 - n×m),然后就去找当前最大值就可以了,不断的更新被打出的牌,就可以求出答案了。

代码如下:

#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;

int data[50];

bool cmp(int a,int b)
{
    return a>b;
}

int main()
{
    int n,m,cas=0;
    while(~scanf("%d%d",&m,&n),m)
    {
        for (int i=1;i<=n;i++)
        {
            scanf("%d",&data[i]);
        }
        sort(data+1,data+1+n,cmp);
        int ll=0,cnt=0;
        for (int maxn=m*n,i=1;i<=n,maxn>=1;maxn--)
        {
            if (maxn==data[i])
            {
                i++;
                if (ll==0)
                {
                    cnt++;
                }
                else
                {
                    ll--;
                }
            }
            else
                ll++;
        }
        printf("Case %d: %d\n",++cas,cnt);
    }
    return 0;
}
时间: 2024-10-12 08:30:12

UVALive 2521 Game Prediction 题解的相关文章

UVALive 7512 November 11th 题解

思路:心态大崩,最多不讲了,最少应该是三个一组,比如......应该是.S..S.,这样占的最多 代码: #include<set> #include<map> #include<cmath> #include<queue> #include<string> #include<cstdio> #include<cstring> #include<sstream> #include<algorithm>

UVALive 6955 Finding Lines(随机化优化)题解

题意:问你是否有一条直线满足这条直线上的点个数与总个数之比不小于p 思路:解法太暴力了,直接随机取两个数,如果能满足条件就输出可以,否则继续随机直到达到300次.证明一下为什么可以随机化,题目给出可能有P >=20的点在线上,假设最惨的情况P = 20,有100个点,所以我们选一次选不到这条直线的概率为 (80 * 79)/(100 * 99),简单点我们记做0.64,那么两次我们找不到这条线的概率为0.64*.0.64--所以我们随机300次,这样选不到这条线的概率就很小很小了,除非RP不行啊

UVALive 7503 Change(乱搞)题解

题意:你现在有面额为A的纸币,现在需要面额为B的钱(可以是一张也可以是好多张拼成一张),有一台自动售货机,里面有任意价格的商品,售货机兑换出的零钱是随机的(比如找你0.03可能给你0.01+0.01+0.01也可能是0.01+0.02),那么问至少要花多少钱你肯定能兑换到所需要的面额.A, B ∈ {0.01, 0.02, 0.05, 0.1, 0.2, 0.5, 1, 2, 5, 10, 20, 50, 100} and A > B 思路:题意读错了...这里的意思不是你只能买一个东西,而是你

UVALive 7501 Business Cycle(二分)题解

题意:n个数,有一个起始值,按顺序从第一个开始不断循环取数,如果取完后相加小于0就变为0,最多取p个数,问你得到大于等于值g所需要的最小起始值为多少 思路:这题目爆long long爆的毫无准备,到处都有可能爆值. 显然,我们能想出,初始值越大,那么走相同步数所得到的数字就会越大(或相等),那么我们就可以用二分法每次判断是否能得到g值,大概logG * n * C的复杂度.那么现在问题就是怎么判定初始值s是否能得到g值. 我们可以求循环两次的结果差dis = tot2 - tot1,来判断每次循

UVALive 5029 Encoded Barcodes

Encoded Barcodes Time Limit:3000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu Submit Status Practice UVALive 5029 Description All the big malls need a powerful system for the products retrieval. Now you are employed design a sub-system: rea

UVALive 6577 Binary Tree 二叉树的LRU串

今天继续攒人品...真开心啊O(∩_∩)O~~各种身体不舒服~~ https://icpcarchive.ecs.baylor.edu/external/65/6577.pdf 题意是这样的,现在有一个向下无限延伸的二叉树.然后输入起点(通过只含LRU的字符串S,从根结点开始执行).LRU分别表示往左儿子走,往右儿子走,往爹娘处走(根结点的爹娘是自己,估计他是石头里蹦出来的). 然后输入一个可选步骤串T.可以选择T中的子序,从起点开始走.然后问可以走到多少个不同的结点. 比赛的时候不会做啊╮(╯

UVALive 6469 Deranged Exams (排列组合:绝逼是纯纯的高中知识啊)

题目意思是 : 给你一个n([1,17])表示有n个数据结构里的术语,然后n个对这些术语的定义,让你对这些术语和定义对号入座(相当于进行连线,A术语连A术语的定义).然后一个 k([0,n]),问你至少前k个术语定义对应错的总共有多少种. 起先我也不怎么会,忘完了,后来看别人的题解,可能我语文真的不怎么好,不是很能理解,然后问的别人...然后xxx给我说我有写个题解的必要了 so... 就是高中排列组合,至少前k个连错的方案总共有多少种,因为如果直接按照题意来,一般都很麻烦,所有就反正来,用[总

FJNU 1155 Fat Brother’s prediction(胖哥的预言)

FJNU 1155 Fat Brother’s prediction(胖哥的预言) Time Limit: 1000MS   Memory Limit: 257792K [Description] [题目描述] Fat Brother is a famous prophet, One day he get a prediction that disaster will come after X days. He is too nervous that sudden die. Fortunatel

UVALive - 4811 Growing Strings (AC自动机+dp)

题目链接:UVALive - 4811 Growing Strings 题意: 给你n个字符串,问你最多能选出多少个字符串,使得s[i]是s[i+1]的子串. 题解: 先将所有的字符串插入AC自动机,将所有字符串按长度排序后,显然dp[i]=max{dp[j]}+1,其中s[j]是s[i]的子串.然后就完了. 1 #include<bits/stdc++.h> 2 #define mst(a,b) memset(a,b,sizeof(a)) 3 #define F(i,a,b) for(int