zoukankan      html  css  js  c++  java
  • PAT Basic 1069. 微博转发抽奖(20)

    小明PAT考了满分,高兴之余决定发起微博转发抽奖活动,从转发的网友中按顺序每隔N个人就发出一个红包。请你编写程序帮助他确定中奖名单。

    输入格式:

    输入第一行给出三个正整数M(<= 1000)、N和S,分别是转发的总量、小明决定的中奖间隔、以及第一位中奖者的序号(编号从1开始)。随后M行,顺序给出转发微博的网友的昵称(不超过20个字符、不包含空格回车的非空字符串)。

    注意:可能有人转发多次,但不能中奖多次。所以如果处于当前中奖位置的网友已经中过奖,则跳过他顺次取下一位。

    输出格式:

    按照输入的顺序输出中奖名单,每个昵称占一行。如果没有人中奖,则输出“Keep going...”。

    输入样例1:
    9 3 2
    Imgonnawin!
    PickMe
    PickMeMeMeee
    LookHere
    Imgonnawin!
    TryAgainAgain
    TryAgainAgain
    Imgonnawin!
    TryAgainAgain
    输出样例1:
    PickMe
    Imgonnawin!
    TryAgainAgain
    输入样例2:
    2 3 5
    Imgonnawin!
    PickMe
    输出样例2:
    Keep going...

    思路:
    边输出边输出,而不是全都读取完再做一次for循环。坑点在于%符号,-4%2结果为0,要避免负数对s取余。

    放码过来:

    #include <cstdio>
    #include <iostream>
    #include <cstring>
    #include <string>
    #include <algorithm>
    #include <cstdlib>
    #include <vector>
    #include <cmath>
    #include <set>
    #include <iomanip>
    #include <sstream>
    #include <unordered_map>
    
    using namespace std;
    
    
    int main() {
    	//freopen("D:/work/hello-cpp/pat_basic/in.txt", "r", stdin);
    
    	int m, n, s;
    	cin >> m >> n >> s;
    	unordered_map<string, int> mp;
    	bool printed = false;
    	int uid = 1;
    	for (int i = 0; i < m; i++) {
    		string name;
    		cin >> name;
    		if (uid>=s && (uid-s)%n==0) {
    			if (mp[name]==0) {
    				cout << name << endl;
    				mp[name] = 1;
    				printed = true;
    				uid++;
    			}
    		}
    		else {
    			uid++;
    		}
    	}
    	if (!printed) {
    		cout << "Keep going..." << endl;
    	}
    
    	//fclose(stdin);
    
    	return 0;
    }
    
    /*
    这题我遇到的坑在于,%这个操作符有坑。
    网上搜到的做法往往是,读取所有输入后再处理,也就是2个for循环。
    实际上边输出边输出就可以的。
    但是需要注意,如果序号不足S,此时计算%可能出错:
    uid-s=-4, n=2, 则-4%2==0
    */
    
  • 相关阅读:
    form表单的两种提交方式,submit和button的用法
    ORACLE SEQUENCE用法(转)
    hive优化
    Hive分区表创建、分类
    Hive体系结构
    Hive入门指南
    mysql统计表中条目个数的方法举例
    mysql如何快速创建相同结构的表
    VMware Workstation下VMnet1等虚拟网卡与主机网卡之间的关系
    linux命令详解——lsof
  • 原文地址:https://www.cnblogs.com/zjutzz/p/7804188.html
Copyright © 2011-2022 走看看