1003 Hit or Miss

2024-08-30 04:08
文章标签 1003 hit miss

本文主要是介绍1003 Hit or Miss,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

又是个坑了我2小时WA到吐的大水题,狗血题目就看了我半天!真是无力吐槽那坑爹的英文题目的描述了。

1.开始以为是几个玩家同步报数匹配,其实是轮流报数匹配,即:A->B->C->D->A->B->C->D->A->B....... 

2. 大致流程是:A做一次报数,如果没有match,放回A自己的底部。如果match了,放到B的底部。A做完一次报数后,轮到B报数(注意只有当B有牌时才报数),如果没有match,放回B自己的底部。如果match了,放到C的底部; 再到C报数。。。。依次循环下去

3.维护几个queue即可。

#include <iostream>
#include<queue>
#include<cstring>
using namespace std;queue<int>que[11];
int callnum[11];
int fina[11];
int T,player,num,ter;int main()
{cin>>T;int yy=1;while(T--){bool flag=false;cin>>player;fill(que,que+player,queue<int>());memset(callnum,0,sizeof(callnum));memset(fina,0,sizeof(fina));for (int i=0;i<52;i++){cin>>num;que[0].push(num);}int c=0;int aa=0;for (;;){c++;if(c>100000) {flag=true;  break;}//terminated situationter=0;for (int i=0;i<player;i++){if(que[i].empty())ter++;}if(ter==player) break;aa=aa%player;if(!que[aa].empty()){	callnum[aa]=callnum[aa]%13;callnum[aa]=callnum[aa]+1;int temp=que[aa].front();que[aa].pop();if (temp==callnum[aa]){if (que[aa].size()==0){fina[aa]=temp;}que[aa+1].push(temp);}elseque[aa].push(temp);}aa++;}if(flag==true) cout<<"Case "<<yy++<<": unwinnable"<<endl;else{cout<<"Case "<<yy++<<": ";for (int i=0;i<player-1;i++){cout<<fina[i]<<" ";}cout<<fina[player-1]<<endl;}}return 0;
}


这篇关于1003 Hit or Miss的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1119753

相关文章

I miss u

I miss u #include<stdio.h> int main() { double world; unsigned letter; short stay; long memories; printf("I miss you.\n"); }

九度考研真题 浙大 2010-1浙大1003:A+B

//题目1003:A+B #include<iostream> #include<string.h> using namespace std; int main() { int n1,n2; int s1[12],s2[12]; int s[12]; char c1[20],c2[20]; while(cin>>c1){ n1=0,n2=0;

POJ 百炼 保研机试 1003:Hangover

1003:Hangover 查看提交统计提示提问 总时间限制:  1000ms  内存限制:  65536kB 描述 How far can you make a stack of cards overhang a table? If you have one card, you can create a maximum overhang of half a ca

HDU 1003(最大子序列和)

题意:给出数据组数,每组第一个数为序列的长度n,后面跟着n个数。求这个序列的最大子序列和。 #include <cstdio>#include <climits>void res(){int n, sum = 0, _max = INT_MIN, t, head = 0, s, e;scanf("%d", &n);for (int i = 0; i < n; ++i){scanf

HDU 4937 (杭电多校 #7 1003题)Lucky Number(瞎搞)

题目地址:HDU 4937 多校的题以后得重视起来。。。每道题都错好多次。。。很考察细节。比如这道。。。。WA了无数次。。。。 这题的思路自己真心想不到。。。这题是将进制后的数分别是1位,2位,3位和更多位的分开来计算。 当是1位的时候,显然只有3到6,此时只能是-1 当是2位的时候,可以转换成一元一次方程求解 当是3位的时候,可以转换成一元二次方程求解 当是4位的时候,此时最多也只有

HDU 4923 (杭电多校 #6 1003题)Room and Moor(公式+栈)

题目地址:HDU 4923 比赛的时候脑残了。。思路完全想出来了。。只不过想出了个根本不可能存在的极端数据,然后一看输入数据是100组,就把自己给否决了。。。sad。。当时就应该大胆试一试的。。。 这个题首先可以把最前面的0和最后面的1去掉,因为这两块总可以用0和1抵消掉。然后中间就分成了10相间的情况,然后根据10相间,可以分成若干组,每一组都是由几个1和几个0组成的。比如说11011011

【PAT】【Advanced Level】1003. Emergency (25)

1003. Emergency (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue As an emergency rescue team leader of a city, you are given a special map of y

HDU-1003-动规-最大子序列和

题目大意:给一个序列,求它的最大子序列和,该子序列的起点,终点。 O(n)的做法.-容易标记起点终点!思想也很简单。 只要前面的加起来为负数了,就开始新的一段子序列和的计算。 4 0 0 2 0 —— 2 1 3 6 2 7 -9 5 4 3 —— 12 1 6 4 0 0 -1 0 —— 0 1 1 7 -1 -2 -3 -2 -5 -1 -2 —— -1 1 1  全部为负数时! 6 -

DP--HDU 1003(最大子串和)

问题描述:          给定整数A1, A2,……AN (可能有负数),求I到j的最大值。 例如:          -2, 11, -4, 13, -5, -2时答案为20   对于这个问题的算法有很多,当然我要说的是使用“动态规划”算法实现的程序,对于这个算法,我可以说很多人都曾经想到,但是没有想全(因为我就是这样的)。还有一点对于这个问题的动态规划的解法是非常经典的,她的时间复杂度是O

hdoj 1003 Max Sum---动态规划,最大子序列求和

初来乍到,动态规划不会呀,刚开始用暴力法,超时了!超时代码如下: 思路:大致是选中一个数当做结尾,然后加和。例如在6 -1 5 8 -7选中5作为结尾大致有如下序列 6  -1   5     -1   5           5 就这样遍历所以的结尾,结果超时。代码如下: #include<iostream>#include<algorithm>using namespace s