程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> SOJ--4393: LaoB's problem1

SOJ--4393: LaoB's problem1

編輯:C++入門知識

SOJ--4393: LaoB's problem1


描述

一個數列包含n(1

Input

第一行包含一個數t代表總的測試樣例數
每組樣例包含4行
第一行包含一個整數n代表數列的長度
第二行包含n個小於1000的正整數用空格隔開
第三行包含一個整數m代表詢問的個數
第四行包含m個在1到n之間的整數代表詢問序號

Output

每組輸出結果包含m個由空格隔開的整數代買m次詢問的結果

Example Input

2
4
255 139 58 412
5
1 1 2 3 3
5
427 563 289 203 326
4
3 1 4 4

Example Output

197 197 58 0 0
203 818 0 0

解析:這道題不難,主要是有容易考慮不到的地方,我是通過結構體來存放數值和編號,然後以數值的大小排序,接著就計算每一個編號的結果值存放到res數組中,容易出錯的是沒有考慮數值可能重復的情況

比如這組數據 5 20 21 20 21 20 5 1 2 3 4 輸出 0 60 0 60 0 如果考慮了這組數據應該問題就不大了。
貼一下自己AC的代碼
#include
#include
using std::sort;
//定義全局變量
const int M=100000+5;
struct data{
	int n;
	int num;
}a[M];
int b[M];
int res[M];
//優先按照數值的大小進行排序,如果數值相等再按照編號升序
bool cmp(data x,data y)
{
	if(x.ny.n)
	{
		return false;
	}else{
		return x.num0&&a[i-1].n==a[temp-1].n)
				{
					res[a[i].num]+=a[temp-1].n;
					--temp;
				}
			}else{
				//與前面的元素相同
				res[a[i].num]=res[a[i-1].num];
			}
		}
		//輸出結果
		for(int i=0; i

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved