1. 程式人生 > 其它 >vue props 多型別_一個TypeScript簡例,以及Vue支援TS的一些些事兒

vue props 多型別_一個TypeScript簡例,以及Vue支援TS的一些些事兒

B - 補提交卡

蒜頭君給自己定了一個巨集偉的目標:連續
100
天每天堅持在計蒜客題庫提交一個程式。
100
天過去了,蒜頭君檢視自己的提交記錄發現有
N
天因為貪玩忘記提交了。於是蒜頭君軟磨硬泡、強忍著花椰菜鄙視的眼神從花椰菜那裡要來
M
張 “補提交卡”。每張 “補提交卡” 都可以補回一天的提交,將原本沒有提交程式的一天變成有提交程式的一天。蒜頭君想知道通過利用這
M
張補提交卡,可以使自己的 “最長連續提交天數” 最多變成多少天。

輸入格式
在這裡插入圖片描述

輸出格式
對於每組資料,輸出通過使用補提交卡蒜頭君的最長連續提交天數最多變成多少。

Sample Input
3
5 1
34 77 82 83 84
5 2

10 30 55 56 90
5 10
10 30 55 56 90
Sample Output
76
59
100

思路 就是找差n 資料間的差值
關鍵在於考慮第一個資料和最後一個數據 所以加a[0]=0;
a[n+1]=101;很關鍵

#include<stdio.h>
int a[1010];
int main()
{
	int n,m,x;
	int i,j;
	int cnt,max;
	scanf("%d",&x);
	while(x--)
	{
	
		scanf("%d %d",&n,&m);
		for(i=1;i<=n;
i++) scanf("%d",&a[i]); if(m>=n) { printf("100\n"); continue; } max=0; a[0]=0; a[n+1]=101; for(i=1;i<=n-m+1;i++) { cnt=a[i+m]-a[i-1]-1; //printf("cnt=%d\n",cnt); if(cnt>max) max=cnt; } printf("%d\n",max); } }

E - 數列極差

佳佳的老師在黑板上寫了一個由 n 個正整陣列成的數列,要求佳佳進行如下操作:每次擦去其中的兩個數 a 和 b,然後在數列中加入一個數 a×b+1,如此下去直至黑板上剩下一個數為止,在所有按這種操作方式最後得到的數中,最大的為 max,最小的為 min, 則該數列的極差定義為 M=max−min。

由於佳佳忙於準備期末考試,現請你幫助他,對於給定的數列,計算出相應的極差 M。

輸入格式
第一行為一個正整數 n 表示正整數序列的長度;
在接下來的 n 行中,每行輸入一個正整數。
接下來的一行有一個 0,表示資料結束。

輸出格式
輸出只有一行,為相應的極差 d。

樣例
Input Output
3
1
2
3
0
2
資料範圍與提示
對於全部資料,0≤n≤50000,保證所有資料計算均在 32 位有符號整數範圍內

貪心思想:每次選最小的運算 注意新算出來的資料需要與剩下的資料重新排序選擇最小的

#include<stdio.h>
void quick_sort1(int left,int right,int a[])
{
	int i,j,temp,t;
	if(left>right)
	return;
	temp=a[left];
	i=left;
	j=right;
	while(i!=j)
	{
		while(a[j]>=temp&&i<j)
		j--;
		while(a[i]<=temp&&i<j)
		i++;
		//沒相遇時交換
			if(i<j)
		{
			t=a[i];
			a[i]=a[j];
			a[j]=t;
		}
		 
		
	}
	a[left]=a[i];
	a[i]=temp;
	quick_sort1(left,i-1,a);
	quick_sort1(i+1,right,a);
	return;	
 } 
 void quick_sort2(int left,int right,int a[])
{
	int i,j,temp,t;
	if(left>right)
	return;
	temp=a[left];
	i=left;
	j=right;
	while(i!=j)
	{
		while(a[j]<=temp&&i<j)
		j--;
		while(a[i]>=temp&&i<j)
		i++;
		//沒相遇時交換
			if(i<j)
		{
			t=a[i];
			a[i]=a[j];
			a[j]=t;
		}
		 
		
	}
	a[left]=a[i];
	a[i]=temp;
	quick_sort2(left,i-1,a);
	quick_sort2(i+1,right,a);
	return;	
 } 
int main()
{
	int a[1010],b[1010],n;
	int x,i,cnt=0,ans,sum1,sum2;
	scanf("%d",&n);
	for(i=0;i<n;i++)
	scanf("%d",&a[i]);
	//quick_sort(0,cnt-1);
	for(i=0;i<=n;i++)
	{
		b[i]=a[i];
	}
	quick_sort2(0,n-1,b);
	quick_sort1(0,n-1,a);
	/*for(i=0;i<n;i++)
	{
		printf("%d ",b[i]);
	}*/
	//for(i=0;i<cnt;i++)
	//printf("%d ",a[i]);
	for(i=0;i<=n-2;i++)
	{
		a[i+1]=a[i]*a[i+1]+1;
		b[i+1]=b[i]*b[i+1]+1;
		quick_sort1(i+1,n-1,a);
		quick_sort2(i+1,n-1,b);
	}
	//printf("%d %d",a[n-1],b[n-1]);
	printf("%d",a[n-1]-b[n-1]);
	
	
}

過河

UCAS_ACM小組的N名成員外出旅遊,結果在路上碰到了一條河,岸邊只有一艘船,這艘船最多隻能載兩人。
已知N名成員每人有一個過河時間ti,每次划船過河的時間等於船上成員的過河時間的最大值。請你找N名成員全部到底對岸的最少耗時。
輸入
輸入包含多組測試資料。第一行含有一個正整數T,表示資料組數。
每組資料的第一行含有一個整數N。接下來的一行含有N個整數,表示ti。
輸出
對於每組輸入資料輸出一行,每行包括1個整數,代表該組資料下到對岸的最少耗時。
樣例輸入
2
4
1 2 5 10
5
1 2 8 7 6
樣例輸出
17
22
資料範圍
1≤T≤20
1≤N≤1000
1≤ti≤100
提示
船劃到對岸後不會自動飄回來的哦~

n>=4 時分兩種情況 選擇兩種情況中時間較短的那個(每次會送去兩個人 所以遞推n-=2)
一種情況是 最快的和最慢去 最快的回來 最快的和次慢的去 最快的回來
另一種情況 最快的和次快的去 最快的回來 然後最慢的和次慢的去 次快的回來
n=3時 為三個時間的總和
n=2時 為較快的那個時間

#include<stdio.h> 
int a[1010];
void quick_sort(int left,int right)
{
	int i,j,temp,t;
	if(left>right)
	return;
	temp=a[left];
	i=left;
	j=right;
	while(i!=j)
	{
		while(a[j]>=temp&&i<j)
		j--;
		while(a[i]<=temp&&i<j)
		i++;
		//沒相遇時交換
			if(i<j)
		{
			t=a[i];
			a[i]=a[j];
			a[j]=t;
		}
		 
		
	}
	a[left]=a[i];
	a[i]=temp;
	quick_sort(left,i-1);
	quick_sort(i+1,right);
	return;	
 } 
int min(int x,int y)
{
	int m;
	m=x;
	if(y<x)
	m=y;
	return m;
}

int main()
{
	int x;
	int ans,i,j,s1,s2;
	scanf("%d",&x);
	while(x--)
	{	int n;
		ans=0,s1=0,s2=0;
		scanf("%d",&n);
		for(i=1;i<=n;i++)
			scanf("%d",&a[i]);
		//sort(a,a+n);
		quick_sort(1,n);
		while(n>0)
		{
			if(n>=4)
			{	s1=a[n]+a[n-1]+a[1]+a[1];
			    s2=a[1]+a[2]+a[n]+a[2];
				ans+=min(s1,s2);
				n=n-2;
			}
			else if(n==3)
			{	ans+=a[1]+a[2]+a[3];
				n=n-3;
			}
			else if(n<=2)
			{
				ans+=a[n];
				n=n-2;}
		}printf("%d\n",ans);


	}
}

H - 超市

超市裡有N個商品. 第i個商品必須在保質期(第di天)之前賣掉, 若賣掉可讓超市獲得pi的利潤.
每天只能賣一個商品.
現在你要讓超市獲得最大的利潤.
(原題說明過於抽象)

Input
多組資料.
每組資料第一行為N, 即超市的商品數目
之後N行數字. 第i行為 pi, di
N , pi, di <= 10000

Output
對於每一組資料, 輸出當前條件下超市的最大利潤

Sample Input
4
50 2
10 1
20 2
30 1

7
20 1
2 1
10 3
100 2
8 2
5 20
50 10
Sample Output
80
185

思路:以錢來排序 從一遍歷對應時間 有空閒天數即可賣出
book用於標記是否賣出

#include<stdio.h>
#include<algorithm>
using namespace std;
int book[100001]; 
struct fact
{
	int money;
	int time;
}a[100001];
bool cmp(struct fact x,struct fact y)
{
	return x.money>y.money;
}
int main()
{
	int n,i,j,ans;
	while(scanf("%d",&n)!=EOF)
	{
		ans=0;
		for(i=0;i<n;i++)
		scanf("%d %d",&a[i].money,&a[i].time);
		sort(a,a+n,cmp);
		//for(i=0;i<n;i++)
		//printf("%d ",a[i].money);
		for(i=0;i<n;i++)
			for(j=a[i].time;j>=1;j--)
			{
				if(book[j]==0)
				{
					book[j]=1;
					ans+=a[i].money ;
					break;
				}
			}
			printf("%d\n",ans);
			for(i=0;i<=10000;i++)
				book[i]=0;
	}
	return 0;
}

I - 放蘋果

把M個同樣的蘋果放在N個同樣的盤子裡,允許有的盤子空著不放,問共有多少種不同的分法?(用K表示)5,1,1和1,5,1 是同一種分法。
Input
第一行是測試資料的數目t(0 <= t <= 20)。以下每行均包含二個整數M和N,以空格分開。1<=M,N<=10。
Output
對輸入的每組資料M和N,用一行輸出相應的K。
Sample Input
1
7 3
Sample Output
8

O - 拯救X先生

話說上回講到海東集團面臨內外交困,公司的元老也只剩下XHD夫婦二人了。顯然,作為多年拼搏的商人,XHD不會坐以待斃的。
一天,當他正在苦思冥想解困良策的時候,突然想到了自己的傳家寶,那是公司成立的時候,父親作為賀禮送來的一個錦囊,徐父當時交代,不到萬不得已的時候,不要開啟它。“現在不正是最需要的時候嗎?”,一邊想,XHD一邊找到了這個精心保管的錦囊,開啟一看,裡面只有一句話“杭城北麓千人洞有寶”。
二話不說,XHD拿起一個大口袋就出發了,這個千人洞他是知道的,小的時候,爸爸曾經帶他來過這個隱蔽的路口,並告訴他,這是千人洞。他現在才明白爸爸當初這句話的含義。
儘管有點印象,XHD還是花了很大的精力才找到這個異常隱蔽的洞口,走進一看,幾乎驚呆了,真的是眼花繚亂!不過儘管寶貝的種類不少,但是每種寶貝的量並不多,當然,每種寶貝單位體積的價格也不一樣,為了挽救HDU,現在請你幫忙儘快計算出來XHD最多能帶回多少價值的寶貝?(假設寶貝可以分割,分割後的價值和對應的體積成正比)
Input
輸入包含多個測試例項,每個例項的第一行是兩個整數v和n(v,n<100),分別表示口袋的容量和寶貝的種類,接著的n行每行包含2個整數pi和mi(0<pi,mi<10),分別表示某種寶貝的單價和對應的體積,v為0的時候結束輸入。
Output
對於每個測試例項,請輸出XHD最多能取回多少價值的寶貝,每個例項的輸出佔一行。
Sample Input
2 2
3 1
2 3
0

思路:體積相減作為判斷條件

#include<stdio.h>
#include<algorithm> 
#include<cstdio>
using namespace std;
struct f
{
	int price;
	int v;
}a[1010];
bool cmp(f x, f y)
{
return x.price>y.price;
}

int main()
{
	int n,m,ans,sum=0,count=0,i;
	while(scanf("%d",&m)!=EOF)
	{	if(m==0)
		return 0;
		sum=0,count=0;
		scanf("%d",&n);
		for(i=0;i<n;i++)
		scanf("%d %d",&a[i].price,&a[i].v);
		ans=0;
		sort(a,a+n,cmp);
		for(i=0;i<n;i++)
		{
			if(m>=a[i].v)
			{
				ans+=a[i].price*a[i].v;
				m-=a[i].v;
				if(m==0)
				break;
			}
			else
			{
				ans+=(m*a[i].price);
				break;
			}
		}
		printf("%d\n",ans);
	}
	return 0;
}

奇怪的電梯

呵呵,有一天我做了一個夢,夢見了一種很奇怪的電梯。大樓的每一層樓都可以停電梯,而且第ii層樓(1 \le i \le N)(1≤i≤N)上有一個數字K_i(0 \le K_i \le N)K
i

(0≤K
i

≤N)。電梯只有四個按鈕:開,關,上,下。上下的層數等於當前樓層上的那個數字。當然,如果不能滿足要求,相應的按鈕就會失靈。例如:3, 3 ,1 ,2 ,53,3,1,2,5代表了K_i(K_1=3,K_2=3,…)K
i

(K
1

=3,K
2

=3,…),從11樓開始。在11樓,按“上”可以到44樓,按“下”是不起作用的,因為沒有-2−2樓。那麼,從AA樓到BB樓至少要按幾次按鈕呢?

輸入格式
共二行。

第一行為33個用空格隔開的正整數,表示N,A,B(1≤N≤200, 1≤A,B≤N)N,A,B(1≤N≤200,1≤A,B≤N)。

第二行為NN個用空格隔開的非負整數,表示K_iK
i

輸出格式
一行,即最少按鍵次數,若無法到達,則輸出-1−1。

輸入輸出樣例
輸入 #1複製
5 1 5
3 3 1 2 5
輸出 #1複製
3

典型搜素問題 學習點一 cnt 二模板 dfs()函式中 結束條件 標記=1(開始遍歷) 滿足條件下一步沒標記的話 進行下一步搜素 否則取消標記


#include<stdio.h>
int x,y,cnt,m=10000,i,book[1010],a[1010],n,ans;
void dfs(int c)
{
	if(cnt>=m)
	return;
	if(c==y)
	{
		m=cnt;
		return;
	}
	book[c]=1;
	cnt++;
	if(c+a[c]<=n&&book[c+a[c]]==0)
	dfs(c+a[c]);
	if(c-a[c]>=1&&book[c-a[c]]==0)
	dfs(c-a[c]);
	cnt--;
	book[c]=0;
} 
int main()
{
	while(scanf("%d",&n)!=EOF)
	{
		if(n==0)
		return 0;
		scanf("%d %d",&x,&y);
		for(i=1;i<=n;i++)
		scanf("%d",&a[i]);
		dfs(x);
		if(m==10000)
		printf("-1\n");
		else
		printf("%d\n",m);}
}

(同樣的題在洛谷能通過 vjudge平臺上不行?)