2015 항 저 우 전기 신입생 대회 1008 놀이 터[신 갱]

놀이 터
Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 4876    Accepted Submission(s): 757
Problem Description
  어 렸 을 때 집안 형편 이 어려워 서 샤 오 밍 은 놀이 터 에 가 본 적 이 없어 아직도 아 쉬 움 을 품 고 있다.
  최근 에 항 저 우 에 놀이 터 를 막 지 었 는데 어린 시절 의 유감 을 메 우기 위해 샤 오 밍 은 돈 을 가지 고 잠시 도 지체 하지 않 고 체험 해 야 한다.
  이런 곳 은 처음 이 라 샤 오 밍 도 어떤 종목 이 재 미 있 는 지 모 르 기 때문에 가능 한 한 많은 종목 을 체험 하고 싶 었 다.오기 전에 샤 오 밍 은 친구 에 게 놀이 터 에 대해 서도 물 어 봤 다.친구 가 추천 한 것 이 라면 꼭 체험 해 야 한다.물론 모든 항목 에 일정한 비용 이 필요 하 다.샤 오 밍 의 돈 이 부족 할 때 더 이상 놀 수 없다.
  현재 샤 오 밍 이 가지 고 있 는 돈 과 모든 게임 항목 의 비용 을 이미 알 고 있 습 니 다.샤 오 밍 은 최대 몇 개의 항목 을 체험 할 수 있 습 니까?
 
Input
첫 번 째 행동 의 정수 T 를 입력 하면 T 조 테스트 데이터 가 있 음 을 표시 합 니 다.
각 그룹의 데이터:
첫 번 째 줄 은 세 개의 정수 n,m,k 로 놀이 터 의 게임 항목 수,친구 가 추천 한 게임 항목 수,샤 오 밍 이 가지 고 있 는 돈 수(1<=m<=n<=n<=10000,1<=k<=10^9)를 나타 낸다.
두 번 째 줄 은 n 개의 정수 이 고,두 번 째 정수 xi 는 두 번 째 게임 항목 의 비용(1<=xi<=10^9)을 나타 낸다.
세 번 째 줄 은 m 개의 정수 pi 로 친구 가 첫 번 째 pi 게임 항목(1<=pi<=n)을 추천 한 다 는 뜻 입 니 다.
 
Output
샤 오 밍 이 가 진 돈 이 친구 가 추천 한 프로젝트 도 모두 체험 할 수 없다 면 수출-1;그렇지 않 으 면 샤 오 밍 이 가장 많이 체험 할 수 있 는 항목 수 를 출력 하 세 요.
각 그룹의 출력 이 한 줄 을 차지한다.
 
Sample Input

   
   
   
   
2 5 2 10 4 3 8 1 12 1 2 5 2 10 4 3 8 1 12 1 3

 
Sample Output

   
   
   
   
3 -1

 
이 신 갱!큰 구덩이!아무래도 경험 이 부족 한 거 야...
처음에 다 못 쓰 고 브레이크 를 했 어 요.여러 그룹의 데이터 라 는 제목 을 잊 어 버 렸 어 요...
결국결국경기 할 때 이 문 제 를 쳐 다 보 았 는데 적어도 한 시간 은 보 았 지만 떨 어 지지 않 았 다.가슴 이 답답 하 다.
어쨌든 한 번 좌절 을 당 하면 그 만큼 현명 해진 다.다음 에는 이런 잘못 을 다 시 는 저 지 르 지 않 을 것 이다.
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;

int x[10005]={0};
int nx[10005]={0};
int main(void)
{
	int t;
	scanf("%d%*c",&t);
	while(t--)
	{
		int n,m,k,count=0;
		scanf("%d%d%d%*c",&n,&m,&k);
		memset(x,0,sizeof x);
		memset(nx,0,sizeof nx);
		for(int i=1 ; i<=n ; ++i)//   n
			scanf("%d",&x[i]);
		for(int i=1 ; i<=m ; ++i)//m
		{
			int temp;
			scanf("%d",&temp);
			if(k>=x[temp])
			{
				k-=x[temp];
				x[temp]=0;
				count++;
			}
			else
			{
				count=-1;
				//break;  !  !    ! 
			}
		}
		if(count==-1)printf("-1
"); else { int p=0; for(int i=1 ; i<=n ; ++i)//n { if(x[i]) { nx[p++]=x[i]; } } sort(nx,nx+p);//nlogn for(int i=0 ; i<p ; ++i)//m+nlogn+2*n { if(k>=nx[i]) { k-=nx[i]; count++; } else { break; } } printf("%d
",count); } } return 0; }

좋은 웹페이지 즐겨찾기