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
    */
    
  • 相关阅读:
    LeetCode 461. Hamming Distance
    LeetCode 442. Find All Duplicates in an Array
    LeetCode 448. Find All Numbers Disappeared in an Array
    LeetCode Find the Difference
    LeetCode 415. Add Strings
    LeetCode 445. Add Two Numbers II
    LeetCode 438. Find All Anagrams in a String
    LeetCode 463. Island Perimeter
    LeetCode 362. Design Hit Counter
    LeetCode 359. Logger Rate Limiter
  • 原文地址:https://www.cnblogs.com/zjutzz/p/7804188.html
Copyright © 2011-2022 走看看