[ACM] POJ 1218 THE DRUNK JAILER (关灯问题)

THE DRUNK JAILER

Time Limit: 1000MS   Memory Limit: 10000K
Total Submissions: 23246   Accepted: 14641

Description

A certain prison contains a long hall of n cells, each right next to each other. Each cell has a prisoner in it, and each cell is locked.

One night, the jailer gets bored and decides to play a game. For round 1 of the game, he takes a drink of whiskey,and then runs down the hall unlocking each cell. For round 2, he takes a drink of whiskey, and then runs down the

hall locking every other cell (cells 2, 4, 6, ?). For round 3, he takes a drink of whiskey, and then runs down the hall. He visits every third cell (cells 3, 6, 9, ?). If the cell is locked, he unlocks it; if it is unlocked, he locks it. He

repeats this for n rounds, takes a final drink, and passes out.

Some number of prisoners, possibly zero, realizes that their cells are unlocked and the jailer is incapacitated. They immediately escape.

Given the number of cells, determine how many prisoners escape jail.

Input

The first line of input contains a single positive integer. This is the number of lines that follow. Each of the following lines contains a single integer between 5 and 100, inclusive, which is the number of cells n.

Output

For each line, you must print out the number of prisoners that escape when the prison has n cells.

Sample Input

2
5
100

Sample Output

2
10

Source

Greater New York 2002

解题思路:

题意为n个监狱,编号1到n,初始均关闭,进行n局游戏,第一局,把所有的监狱都打开,第i(i>=2)局,把编号为 i 的倍数的监狱的状态改变(打开变为关闭或关闭变为打开)。问n局游戏以后,有多少个监狱为打开状态。 用d[]数组来保存监狱的状态,模拟n局游戏就可以了。

代码:

#include <iostream>
#include <string.h>
#include <stack>
#include <iomanip>
#include <cmath>
using namespace std;
bool d[110];

int main()
{
    int t,n;
    cin>>t;
    while(t--)
    {
        cin>>n;
        int cnt=0;
        memset(d,0,sizeof(d));
        for(int i=2;i<=n;i++)
        {
            for(int j=i;j<=n;j+=i)
                d[j]=1-d[j];//状态改变
        }
        for(int i=1;i<=n;i++)
            if(d[i]==0)
            cnt++;
        cout<<cnt<<endl;
    }
    return 0;
}

[ACM] POJ 1218 THE DRUNK JAILER (关灯问题)

时间: 2024-12-28 17:41:09

[ACM] POJ 1218 THE DRUNK JAILER (关灯问题)的相关文章

开灯问题 —— POJ 1218 THE DRUNK JAILER

对应POJ 题目:点击打开链接 THE DRUNK JAILER Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 24831   Accepted: 15569 Description A certain prison contains a long hall of n cells, each right next to each other. Each cell has a prisoner in it, and eac

poj 1218 THE DRUNK JAILER【水题】

THE DRUNK JAILER Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 25124   Accepted: 15767 Description A certain prison contains a long hall of n cells, each right next to each other. Each cell has a prisoner in it, and each cell is locked

POJ 1218 THE DRUNK JAILER

开关问题,有n个灯,分别由n个开关控制,拨一下开关则可以改变灯的状态(开->关 关->开).初始状态灯都是关着的,先把每个开关都拨一下,然后拨一下2的倍数的开关,接着3的倍数,直到n的倍数,问最后有多少灯是开着的. #include <iostream> #include <cstring> using namespace std; int main() { int n; cin>>n; while(n--) { int t, a[110], k; mems

HDU 1218 THE DRUNK JAILER【类开灯问题】

THE DRUNK JAILER Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 27268   Accepted: 16933 Description A certain prison contains a long hall of n cells, each right next to each other. Each cell has a prisoner in it, and each cell is locked

hdu 1337 The Drunk Jailer

http://acm.hdu.edu.cn/showproblem.php?pid=1337 1 #include <cstdio> 2 #include <cstring> 3 #define maxn 200 4 using namespace std; 5 int main() 6 { 7 int t; 8 int a[maxn]; 9 scanf("%d",&t); 10 int n; 11 while(t--) 12 { 13 scanf(&q

[ACM] POJ 2947 Widget Factory (高斯消元)

Widget Factory Time Limit: 7000MS   Memory Limit: 65536K Total Submissions: 4436   Accepted: 1502 Description The widget factory produces several different kinds of widgets. Each widget is carefully built by a skilled widgeteer. The time required to

[ACM] POJ 1442 Black Box (堆,优先队列)

Black Box Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 7099   Accepted: 2888 Description Our Black Box represents a primitive database. It can save an integer array and has a special i variable. At the initial moment Black Box is empt

[ACM] POJ 1068 Parencodings(模拟)

Parencodings Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 19352   Accepted: 11675 Description Let S = s1 s2...s2n be a well-formed string of parentheses. S can be encoded in two different ways: q By an integer sequence P = p1 p2...pn

[ACM] POJ 3295 Tautology (构造)

Tautology Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 9302   Accepted: 3549 Description WFF 'N PROOF is a logic game played with dice. Each die has six faces representing some subset of the possible symbols K, A, N, C, E, p, q, r, s,