[2020.2 2.5 일 Jizhong] 문제 시뮬레이션 게임 용액

디렉토리

T1:最大值
T2:火柴
T3:游戏
T4:hack的比赛

이상 다음 게임 ...... 당신이 행복 %입니다

주제로 돌아 ... T1 : 최대

제목 설명

소정의 수 (N), {X1, X2, ..., XN} 요구 선택 적어도 수가 최대 개수 N의 제품, 예컨대 그 최대 합.

기입

첫번째 라인의 정수 N은 숫자의 개수 나타내는
다음의 n 개의 라인들 각각의 행 정수 XI을 -10 ≤xi≤ 10

수출

출력 라인은 최대 제품을 나타냅니다

샘플 입력

샘플 입력 1 :

3
-1
2
-4

샘플 입력 2 :

3
3
2
-4

분석 : 열거

녹음 가장 큰 음수 (제외), 숫자 0 (판정 결과).
일부 지불 관심을 세부 사항은 ,
의 물결 할 판사를 잘.
------------------------------

암호:

#include<cmath>
#include<iomanip>
#include<algorithm>
#include<cstring>
#include<cstdio>
#include<iostream>
using namespace std;
typedef long long LL;
int x,w,k,n,i,maxx=-0x7fffffff+1;//int最小值
int ans=1;//为1,不然怎么乘都是0
int main(){
	freopen("max.in","r",stdin);
    freopen("max.out","w",stdout);
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		cin>>x;
		if(x!=0) ans*=x; //先乘起来
		else w++;  //是0就计数
		if(x<0)
		{
			if(maxx<x) maxx=x;  //找最大负数
		}
	}
	if(ans<0&&ans!=maxx) ans/=maxx;  //除
	if(w==n) cout<<0;  //全部是0
	else cout<<ans;

return 0;
}

T2 : 일치

제목 설명

그림 삽입 설명 여기
N 비트 수, 일치 스틱 후 재 배열의 최대 수를 감안할 때, 한 수는 얼마입니까?
참고 더 많거나 적은 장소 중, 모두를 사용하여 성냥 없다.

기입

데이터의 개수를 나타내는 정수 첫번째 라인 T가 세트
N 정수 다음 T 라인 각각 및 N의 원 전화 번호를 나타내는 비트 수이며, 프리앰블은 공간으로 분리 0 일 수있다.

수출

각 시험, 출력 라인에 대해, 최대 수의 번호를 얻을 수있다.

샘플 입력

3
1 3
3 512
3 079

샘플 출력

5
977
997

분석 : 욕심

기록에 필요한 각 숫자 일치의 수를 최대에서 최소로 높은에서 낮은, (당신에게 사진을) 열거 넣어 경우, 다음에이 그림, 전체 2 (8) 전체 해제 또는 넣어 하는 방법을 : 괜찮습니다 (참고로 단지) 밖으로 실행합니다. 입력 문자 에,주의를 기울 변환 을.
------------------------------

암호:

#include <cstdio>
#include <cstring>
using namespace std;
const int cnt[10] = {6,2,5,5,4,5,6,3,7,6};  //火柴棒数
int t,n,sum,cur;
char ch;
inline bool judge(int i,int j)
{return i * 2 <= j && j <= i * 7;}  //判断函数
int main()
{
	freopen("match.in","r",stdin);
	freopen("match.out","w",stdout);
	scanf("%d",&t);
	while(t--)
	{
		sum = 0;
		scanf("%d",&n);
		for(register int i = 1;i <= n;++i)
		{
			scanf(" %c",&ch);
			sum += cnt[ch - '0'];  //先全部加起来
		}
		for(register int i = n;i >= 1;--i)
		{
			cur = 9;
			if(i == 1)  //特判
			{
				while(sum != cnt[cur])
					--cur;
				putchar(cur + '0');
				break;
			}
			while(!judge(i - 1,sum - cnt[cur]))
				--cur;
			sum -= cnt[cur];  //排除不能的
			putchar(cur + '0');
		}
		puts("");
	}
	return 0;
}

T3 : 게임

제목 설명

1 및 N, 후 구오 수를 추측하려고 사이 루 명상 X 번호 : Guyu 구오와 튜브 루는 게임을하고있다.
"미지수가 이순신 나눌 수 있습니까?"구오 m 앞으로 질문을 넣을 수 있습니다
구오는 우선 주어진 그 질문을 해요, 그리고 루 아니오 ""예 "또는 모든 질문에 따라 다음 절차에 따라 게임을 "대답. 응답 m의 질문을받은 후, 구오는 자신의 추측을 줄 것이다.
구오이 문제의 m를 제기하는 가장 좋은 방법으로 그를 도울 수있는 프로그램을 작성하고, 지금은 보증하에 확실한 대답, 최소의 m의 요청받을 수 있습니다 질문의 최소 번호를 알고 싶었다. 그러나 구오 사탕과 코드를 변경할 수있는 시간을 보내 그의 아름다운 자매 학교를 먹는 바쁜 그가 당신을 발견, 그래서 나는 당신이 그를이 문제를 해결하는 데 도움 수 있기를 바랍니다, (그래서 사탕이 많이 만료가 매우 많은 사탕 자매를 보내).

기입

행 정수 N

수출

행 정수 m

샘플 입력

입력 샘플 [1]

4

입력 샘플 [2]

8

샘플 출력

샘플 출력 [1]

3

샘플 출력 [2]

6

분석 : 열거 수학

일회성 인상으로 m 질문 하고 대답, 단지 문제에 의해 결정될 수있다 모든 경우에 끝낼 수 있었다.
모든 내 N 소수가 추구하고 사용 부울 타입이 저장되어있는
대답은 모두이다, 푸시 푸시, 실제로 발생할 수있는 소수의 수 , 모든 소수에 대한 대답은 너무 힘 <= N 수의
------- -----------------------

암호:

#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
using namespace std;
bool f[100010];
long long w;
int n,ans;
int main()
{
	freopen("game.in","r",stdin);
	freopen("game.out","w",stdout);
	cin>>n;
	memset(f,false,sizeof f);
	f[1] = true;
	ans = 0;
	for(int i = 2;i <= n;i++)  //找质数
		if(f[i] == false)
			for(int j = 2;j <= n / i;j++)
				f[i * j] = true;  //布尔存放
	for(int i = 2;i <= n;i++)
		if(f[i] == false)
		{
			w = i;
			while(w <= n)
			{
				ans++;  //出现次数
				w *= i;  //幂次
			}
		}
	cout<<ans;
}

T4 : 해킹 게임

제목 설명

Codefires 라운드 끝나고! ZCC는 점 C 제목을 통해 수행되었다. 그러나 그는 다른 선수들도 문제를 해결하기가 가장 어려운 방을 찾을 수 놀랐습니다. ZCC는 대부분의 선수가 FST 경험을 바탕 것이라고 결론을 내렸다! 물론, 가장 높은 선수 Memset137 평가의 제거. 이에 앞서이 ZCC는 그에게 더 높은 점수를 만들기 위해를 해킹합니다. 큰이 평가에 따라 정렬에 ZCC, N 플레이어와 함께 방에 더하여, 그들은 작은에서왔다 (Memset137 있도록 N 번째 선수 순위)입니다. ZCC 성공적으로 i 번째 플레이어를 해킹했을 때, 그는 점을 나는 소득을 얻을 것이다. 당신은 당신이 또한 Memset137 자신 이외의 모든 플레이어를 해킹, 그 고도로 숙련 된 ZCC 해킹, 균열 샷을 가정 할 수 있지만,이 그동안 다른 플레이어를 방해하지 않습니다에.
겸손과 ZCC 때문에, 그는 자신의 높은 점수를 원하지 않았다. ZCC는 알고 싶어하므로 자신의 점수에서 L과 R (C≤L≤R <C + N) 사이에, 많은 다른 선택 몇 가지 해킹 프로그램이 있습니다.
물론 대답은 모듈로 998 (244) (353)에 큰하시기 바랍니다 출력 해답이 될 것입니다.

기입

라인 네 정수 N, C, L, R, N을 나타내는 플레이어는, 현재 점수 바람직한 R은 L의 점수 사이 C 인

수출

출력 라인, 프로그램의 수

샘플 입력

샘플 입력 1 :

3 0 1 2

샘플 입력 2 :

5 13 14 17

샘플 입력 3 :

100 0 23 59

샘플 출력

샘플 출력 1 :

2

샘플 출력 2 :

6

샘플 출력 3 :

90567

분석 : DP

우선, 집합 F가 [I] [J] 나 여러 전방 및 J의 수로부터 선택하는 프로그램의 수이고 ,
는 발사 용이 F [I] [J] = F [I-1] [J] + F [ I-1] [지]
그러나,이 공간 복잡도는 O (노스 캐롤라이나) 확실히 튀긴 것
발견되므로 전방 m 번호 및 행 m은 (m-1) / 2
순서는 (m-1) / 2를 해요 = N 다음 은 루트 레벨 Nm의 최대의으로부터 선택되는 다음, 루트 N 개수
는 변환 될 수 F를 [I]는 [J] = F [. 1-I, JI는] + F는 [I는 JI]이 (으로부터 선택된 번호 i 및 j는 다수 인
프로그램) ------------------------------

암호:

#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std;
int n,c,l,r,dp[2][10000];
int main()
{
	freopen("hack.in","r",stdin);
    freopen("hack.out","w",stdout);
        scanf("%d%d%d%d",&n,&c,&l,&r);
        l -= c,r = min(r - c,n - 1);
        memset(dp,0,sizeof(dp));
        dp[0][0] = 1;
        int ans = l <= 0 ? 1 : 0;
        for(int i = 1;(i + 1) * i / 2 <= r;i++)
        {  //dp过程
            for(int j = (1 + i) * i / 2;j <= r;j++)
            {
                dp[i & 1][j] = (dp[i & 1][j - i] + dp[(i - 1) & 1][j - i]) % 998244353;
                if(l <= j && j <= r)
                    ans = (ans + dp[i & 1][j]) % 998244353; //取%
            }
            memset(dp[(i - 1) & 1],0,sizeof(dp[(i - 1) & 1]));  //重新初始化
        }
        printf("%d\n",ans);
}

의 없음 ......

게시 48 개 원래 기사 · 원의 찬양 (34) · 보기 (4802)

추천

출처blog.csdn.net/dgssl_xhy/article/details/104196936