VicLin
2005-02-03, 12:56 AM
#include <stdio.h>
#include <conio.h>
int *Arr = NULL;
int N;
void swap(int A,int B){
int Temp = Arr[A];
Arr[A] = Arr[B];
Arr[B] = Temp;
}
int f(){
for(int i=0;i<N;i++){
int Smallest = i;
for(int j=i;j<N;j++){
if(Arr[j]<Arr[Smallest]){
Smallest = j;
}
}
swap(i,Smallest);
}
}
int main(int argc, char *argv[]){
while(scanf("%d",&N) != EOF){
Arr = new int[N];
for(int i=0;i<N;i++){
scanf("%d",&Arr[i]);
}
f();
int Sum = 0;
for(int i=0;i<N;i++){
Sum += (N-i)* Arr[i];
}
printf("%d\n",Sum);
}
getch();
return 0;
}
第二題
贊助商連結
VicLin
2005-02-03, 01:33 AM
#include <stdio.h>
#include <conio.h>
#include <string.h>
char A[256];
char B[256];
char C[256];
int f(){
int ALen = strlen(A);
int BLen = strlen(B);
int First = 0;
for(int i=0;i<ALen;i++){
for(int j=First;j<BLen;j++){
if(A[i]==B[j]){
First = j+1;
C[strlen(C)] = A[i];
}
}
}
}
int main(int argc, char *argv[]){
while(scanf("%s %s",A,B) != EOF){
memset(C,0,sizeof(C));
f();
printf("The LCS of \"%s\" and \"%s\" is \"%s\"\n",A,B,C);
}
getch();
return 0;
}
第四題
修訂 First要+1
mzhuang
2005-02-03, 01:38 AM
今天考試真想哭...粗心> <"
不知道還有沒有參加選訓的機會了..
第一題:簡單的dp..費蒙那數列..
第二題:忘記加進排序結果錯掉了..
第三題:質因數分解...不知道怎樣就是暴掉..int
第四題:lcs..看不懂題目..做的一團亂..
第五題.UNIX ls搜尋..死
第六題..梭哈..死(苦工題
第七...最短路徑...掛
第八題...根本不可能寫的出來..兩塊多邊形重疊..(求聯集之座標)
只做四題...又錯了一堆..搞到最後只有一題對..好傷心
心情很差~"~
第一次看的時候直覺第八題最直觀 :|||:
就找出重疊的那幾個座標
帶入多邊型面積行列式就好了呀 :D
再看一次題目吧...^^"
1塊以上的多邊形(凹或凸)..重疊面積..
VicLin
2005-02-11, 11:24 PM
#include <stdio.h>
#include <string>
using namespace std;
bool MatchStr(const char *MatchStr,const char *String){
int i = 0;
int Begin = 0; // ¦ì©óString¸Ìªº°_ÂI
bool IsHead = true;
while(MatchStr[i]){
switch(MatchStr[i]){
case '*':
IsHead = false;
break;
case '?':
IsHead = false;
if(String[Begin] == 0){
return false;
}
Begin++;
break;
default: // ぴ䥦¦r¤¸ §ä¥X¦¹¦r¦ê ぴñNBegin©¹«á±À
//printf("Match\n");
int j = Begin;
int k = i;
while(MatchStr[k] != '?' && MatchStr[k] != '*' && MatchStr[k]){
if(String[j] == 0){ // ぴìºÉÀY¤F
return false;
}
if(MatchStr[k] == String[j]){ // ¦r¤¸¬Û¦P
k++; // ¤U¤@­Ó¦r¤¸
}else{ // ¦r¤¸¤£¦P
if(MatchStr[i] == String[j]){ // »P²Ä¤@­Ó¦r¬Û¦P
k = i+1;
}else{
k = i; // ²Ä¤@­Ó¦r¤¸
}
}
j++;
}
if(MatchStr[k] == 0){ // ぴìºÉÀY ¦pªG¦r¦ê¤£¬°ºÉÀY ¤£¦X
if(String[j] != 0){
return false;
}
}
if(IsHead){ // ²Ä¤@­Ó ¦r¦ê¤£¥i¥H¸õ¹L¦r¦ê§ä´M
if(k != j){
return false;
}
IsHead = false;
}
Begin = j;
i = k-1;
//printf("%d %d\n",Begin,i);
}
i++;
}
return true;
}
main(){
int N;
char **FileNameArr = NULL;
char **Match = NULL;
while(scanf("%d",&N) != EOF){
int i=0;
FileNameArr = new char*[N];
Match = new char*[N];
for(i=0;i<N;i++){
FileNameArr[i] = new char[256];
memset(FileNameArr[i],0,256);
}
for(i=0;i<N;i++){
scanf("%s",FileNameArr[i]);
}
int M = 0;
scanf("%d",&M);
for(i=0;i<M;i++){
Match[i] = new char[256];
memset(Match[i],0,256);
}
for(i=0;i<M;i++){
scanf("%s",Match[i]);
}
printf("-------Out put-------\n");
for(i=0;i<M;i++){
for(int j=0;j<N;j++){
if(MatchStr(Match[i],FileNameArr[j])){
printf("%s\n",FileNameArr[j]);
}
}
printf("\n");
}
}
return 0;
}
嗯 偷懶了好久
第六題出來了 XD
不好寫阿 三月份又有IOI的比賽
再不做題目又要被幹掉了
dou0228
2005-02-12, 01:08 AM
先謝謝VicLin兄回了那麼大一篇..
據我所知..陣列int arr[100]的名稱arr本身代表一個指標...
假設開100格..則0~99格可以填入int..arr[100]則是填入..\0
'\0'只是告訴電腦陣列讀到這邊結束..至於單位長度由資料型態決定!
這是我知道的..不過...NULL=='\0'嗎..
請告訴我多一點> <"
那是因為某些function 必須以 '\0' 做為結尾, 並不表示陣列最後一個元素必須是 '\0'
而且, int arr[100], 你可以存取 arr[100] 嗎? ;)
實際上 NULL 只是被 define 成 (void *) 0 而已..
把 0 轉型成一個 generic pointer
pointer 基本上至少要有 4 bytes, 剛好和 unsigned long 一樣
所以你可能會看到, 有些程式把 unsigned long 轉成別的型態 :D
Anyway, 字元陣列也並非一定就得要 '\0' 結尾, 端看須要而定.
最常見的當然是 printf()