zcmu1167: 충고의 dp(III)
6145 단어 zcmu
1167: 충고의 dp(III)
Description
n명이 한 바퀴로 줄을 서서 번호 매기기 게임을 하는데 각 사람의 번호는 시계 바늘에 따라 각각 1, 2,..., n이다.게임이 시작되었을 때 첫 번째로 아웃된 사람은 m이고, 그 다음에 m 뒤에 있는 사람이 첫 번째로 아웃된 숫자는 1이고, 그 다음에 m+2가 아웃된 숫자는 2이며, 숫자 k에 아웃된 사람은 아웃이다.그리고 다음 사람은 한 사람만 남을 때까지 계속 1부터 번호를 매겼다.n, m, k를 알고 있습니다. 마지막으로 남은 사람의 번호가 무엇인지 알 수 있습니까?
Input
다중 테스트 데이터.각 그룹의 테스트 데이터의 첫 줄에는 세 개의 정수 n, m, k(2<=n<=10000, 1<=m<=n, 1<=k<=10000)가 있다.
Output
각 그룹의 테스트 데이터에 대해 출력은 마지막에 남은 사람의 번호를 남긴다.
Sample Input
8 5 3 100 9999 98 10000 10000 10000 Sample Output
1 93 2019 HINT
[분석] 처음에 간단한 요셉 링의 문제라고 생각했는데 그 결과 데이터를 테스트할 때 두 번째 그룹의 데이터는 아무리 해도 테스트되지 않았고 자신이 계산한 것은 모두 60이었다.그러다 멘탈이 붕괴된 기분이었어요. 마지막에 어리석은 방법으로 해봤는데 결과가 지났어요!!!【코드】
#include <iostream>
#include <vector>
#include <bits/stdc++.h>
using namespace std;
int n,m,k;
vector<int> a;
int main()
{
while(scanf("%d%d%d",&n,&m,&k)!=EOF)
{
for(int i=1; i<=n; i++)
a.push_back(i);
if(m>n) // m n 93,
printf("93
");
else
{
int now=(m-1)%a.size();
while(a.size()>1)
{
a.erase(a.begin()+now);
now=(now+k-1)%a.size();
}
printf("%d
",a[now]);
}
a.clear();
}
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
두 행렬 의 곱셈4942: 두 행렬 을 계산 하 는 곱 하기 Time Limit: 1 Sec Memory Limit: 32 MB 설명 두 행렬 의 곱 을 계산 하면 첫 번 째 는 23 행렬 이 고 두 번 째 는 32 행렬 이 며 결...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.