2976:All in All
- 總時(shí)間限制:
- 1000ms
- 內(nèi)存限制:
- 65536kB
- 描述
- 給定兩個(gè)字符串s和t,請(qǐng)判斷s是否是t的子序列。即從t中刪除一些字符,將剩余的字符連接起來(lái),即可獲得s。
- 輸入
- 包括若干個(gè)測(cè)試數(shù)據(jù)。每個(gè)測(cè)試數(shù)據(jù)由兩個(gè)ASCII碼的數(shù)字和字母串s和t組成,s和t的長(zhǎng)度不超過(guò)100000。
- 輸出
- 對(duì)每個(gè)測(cè)試數(shù)據(jù),如果s是t的子序列則輸出“Yes”,否則輸出“No”。
- 樣例輸入
sequence subsequence
person compression
VERDI vivaVittorioEmanueleReDiItalia
caseDoesMatter CaseDoesMatter
- 樣例輸出
Yes
No
Yes
No
#include<stdio.h>
#include<string.h>
int main()
{char s[100100],t[100100];
int k,i,j,m,n;
while(scanf("%s",s)!=EOF && scanf("%s",t)!=EOF)
{
m=strlen(s);
n=strlen(t);
for(i=0,j=0;i<=m-1,j<=n-1;j++)
{if(s[i]==t[j]) {
i++;
}
}
if(i==m)
printf("Yes\n");
else
printf("No\n");}
return 0;
}
2974:487-3279- 總時(shí)間限制:
- 1000ms
- 內(nèi)存限制:
- 65536kB
- 描述
- 企業(yè)喜歡用容易被記住的電話(huà)號(hào)碼。讓電話(huà)號(hào)碼容易被記住的一個(gè)辦法是將它寫(xiě)成一個(gè)容易記住的單詞或者短語(yǔ)。例如,你需要給滑鐵盧大學(xué)打電話(huà)時(shí),可以撥打TUT-GLOP。有時(shí),只將電話(huà)號(hào)碼中部分?jǐn)?shù)字拼寫(xiě)成單詞。當(dāng)你晚上回到酒店,可以通過(guò)撥打310-GINO來(lái)向Gino's訂一份pizza。讓電話(huà)號(hào)碼容易被記住的另一個(gè)辦法是以一種好記的方式對(duì)號(hào)碼的數(shù)字進(jìn)行分組。通過(guò)撥打必勝客的“三個(gè)十”號(hào)碼3-10-10-10,你可以從他們那里訂pizza。
電話(huà)號(hào)碼的標(biāo)準(zhǔn)格式是七位十進(jìn)制數(shù),并在第三、第四位數(shù)字之間有一個(gè)連接符。電話(huà)撥號(hào)盤(pán)提供了從字母到數(shù)字的映射,映射關(guān)系如下: A, B, 和C 映射到 2 D, E, 和F 映射到 3 G, H, 和I 映射到 4 J, K, 和L 映射到 5 M, N, 和O 映射到 6 P, R, 和S 映射到 7 T, U, 和V 映射到 8 W, X, 和Y 映射到 9
Q和Z沒(méi)有映射到任何數(shù)字,連字符不需要撥號(hào),可以任意添加和刪除。 TUT-GLOP的標(biāo)準(zhǔn)格式是888-4567,310-GINO的標(biāo)準(zhǔn)格式是310-4466,3-10-10-10的標(biāo)準(zhǔn)格式是310-1010。
如果兩個(gè)號(hào)碼有相同的標(biāo)準(zhǔn)格式,那么他們就是等同的(相同的撥號(hào))
你的公司正在為本地的公司編寫(xiě)一個(gè)電話(huà)號(hào)碼薄。作為質(zhì)量控制的一部分,你想要檢查是否有兩個(gè)和多個(gè)公司擁有相同的電話(huà)號(hào)碼。
- 輸入
- 輸入的格式是,第一行是一個(gè)正整數(shù),指定電話(huà)號(hào)碼薄中號(hào)碼的數(shù)量(最多100000)。余下的每行是一個(gè)電話(huà)號(hào)碼。每個(gè)電話(huà)號(hào)碼由數(shù)字,大寫(xiě)字母(除了Q和Z)以及連接符組成。每個(gè)電話(huà)號(hào)碼中只會(huì)剛好有7個(gè)數(shù)字或者字母。
- 輸出
- 對(duì)于每個(gè)出現(xiàn)重復(fù)的號(hào)碼產(chǎn)生一行輸出,輸出是號(hào)碼的標(biāo)準(zhǔn)格式緊跟一個(gè)空格然后是它的重復(fù)次數(shù)。如果存在多個(gè)重復(fù)的號(hào)碼,則按照號(hào)碼的字典升序輸出。如果輸入數(shù)據(jù)中沒(méi)有重復(fù)的號(hào)碼,輸出一行:
No duplicates.
- 樣例輸入
12
4873279
ITS-EASY
888-4567
3-10-10-10
888-GLOP
TUT-GLOP
967-11-11
310-GINO
F101010
888-1200
-4-8-7-3-2-7-9-
487-3279 - 樣例輸出
310-1010 2
487-3279 4
888-4567 3
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
char map[]="22233344455566677778889999";
char str[80],t[100000][9];
int compare(const void*elem1,const void*elem2){
return(strcmp((char*)elem1,(char*)elem2));
};
int s(int n){
int j,k;
j=k=-1;
while(k<8){
j++;
if(str[j]=='-')continue;
k++;
if(k==3){
t[n][k]='-';
k++;}
if(str[j]>='A'&&str[j]<='Z'){
t[n][k]=map[str[j]-'A'];
continue;};
t[n][k]=str[j];
}
t[n][k]='\0';
return 0;}
int main(){
int n,i,j;
bool noduplicate;
scanf("%d",&n);
for(i=0;i<n;i++){
scanf("%s",str);
s(i);}
qsort(t,n,9,compare);
noduplicate=true;
i=0;while(i<n){
j=i;i++;
while(i<n&&strcmp(t[i],t[j])==0)i++;
if(i-j>1){
printf("%s %d\n",t[j],i-j);
noduplicate=false;}
}
if(noduplicate)printf("No duplicates.\n");
return 0;}
2973:Skew數(shù)- 總時(shí)間限制:
- 1000ms
- 內(nèi)存限制:
- 65536kB
- 描述
- 在 skew binary表示中, 第 k 位的值xk表示xk*(2k+1-1)。 每個(gè)位上的可能數(shù)字是0 或 1,最后面一個(gè)非零位可以是2, 例如, 10120(skew) = 1*(25-1) + 0*(24-1) + 1*(23-1) + 2*(22-1) + 0*(21-1) = 31 + 0 + 7 + 6 + 0 = 44. 前十個(gè)skew數(shù)是 0、1、2、10、11、12、20、100、101、以及102。
- 輸入
- 輸入包含一行或多行,每行包含一個(gè)整數(shù)n。 如果 n = 0 表示輸入結(jié)束,否則n是一個(gè)skew 數(shù)
- 輸出
- 對(duì)于每一個(gè)輸入,輸出它的十進(jìn)制表示。轉(zhuǎn)換成十進(jìn)制后, n 不超過(guò) 231-1 = 2147483647
- 樣例輸入
10120
200000000000000000000000000000
10
1000000000000000000000000000000
11
100
11111000001110000101101102000
0
- 樣例輸出
44
2147483646
3
2147483647
4
7
1041110737
#include<stdio.h>
#include<string.h>
int main()
{int i,k,base[31],sum;
char skew[32];
base[0]=1;
for(i=1;i<31;i++)
base[i]=2*base[i-1]+1;
while(1)
{scanf("%s",skew);
if(strcmp(skew,"0")==0)
break;
sum=0;
k=strlen(skew);
for(i=0;i<strlen(skew);i++)
{k--;
sum+=(skew[i]-'0')*base[k];
}
printf("%d\n",sum);
}
return 0;
}
2972:確定進(jìn)制- 總時(shí)間限制:
- 1000ms
- 內(nèi)存限制:
- 65536kB
- 描述
- 6*9 = 42 對(duì)于十進(jìn)制來(lái)說(shuō)是錯(cuò)誤的,但是對(duì)于13進(jìn)制來(lái)說(shuō)是正確的。即, 6(13) * 9(13) = 42(13), 而 42(13) = 4 * 131 + 2 * 130 = 54(10)。 你的任務(wù)是寫(xiě)一段程序讀入三個(gè)整數(shù)p、q和 r,然后確定一個(gè)進(jìn)制 B(2<=B<=16) 使得 p * q = r. 如果 B有很多選擇, 輸出最小的一個(gè)。例如: p = 11, q = 11, r = 121. 則有 11(3) * 11(3) = 121(3) 因?yàn)?11(3) = 1 * 31 + 1 * 30 = 4(10) 和 121(3) = 1 * 32 + 2 * 31 + 1 * 30 = 16(10)。 對(duì)于進(jìn)制 10,有 11(10) * 11(10) = 121(10)。這種情況下,應(yīng)該輸出 3。如果沒(méi)有合適的進(jìn)制,則輸出 0。
- 輸入
- 輸入有 T組測(cè)試樣例。 T在第一行給出。每一組測(cè)試樣例占一行,包含三個(gè)整數(shù)p、q、r。 p、q、r的所有位都是數(shù)字,并且1 <= p、q、r <= 1,000,000。
- 輸出
- 對(duì)于每個(gè)測(cè)試樣例輸出一行。該行包含一個(gè)整數(shù):即使得p * q = r成立的最小的B。如果沒(méi)有合適的B,則輸出 0。
- 樣例輸入
3
6 9 42
11 11 121
2 2 2 - 樣例輸出
13
3
0
#include<stdio.h>
#include<string.h>
long b2ten(char*x,int b){
int ret=0,i;
int len=strlen(x);
for(i=0;i<len;i++){
if(x[i]-'0'>=b)return -1;
ret*=b;
ret+=x[i]-'0';
}
return (long)ret;
}
int main(){
int n,b;
char p[8],q[8],r[8];
long pa,qa,ra;
scanf("%d",&n);
while(n--){
scanf("%s%s%s",q,p,r);
for(b=2;b<=16;b++){
pa=b2ten(p,b);
qa=b2ten(q,b);
ra=b2ten(r,b);
if(pa==-1||qa==-1||ra==-1)continue;
if(pa*qa==ra){
printf("%d\n",b);
break;}
}
if(b==17)printf("0\n");
}
return 0;}
2966:時(shí)區(qū)轉(zhuǎn)換- 總時(shí)間限制:
- 1000ms
- 內(nèi)存限制:
- 65536kB
- 描述
- 直到19世紀(jì),時(shí)間校準(zhǔn)是一個(gè)純粹的地方現(xiàn)象。每一個(gè)村莊當(dāng)太陽(yáng)升到最高點(diǎn)的時(shí)候把他們的時(shí)鐘調(diào)到中午12點(diǎn)。一個(gè)鐘表制造商人家或者村里主表的時(shí)間被認(rèn)為是官方時(shí)間,市民們把自家的鐘表和這個(gè)時(shí)間對(duì)齊。每周一些熱心的市民會(huì)帶著時(shí)間標(biāo)準(zhǔn)的表,游走大街小巷為其他市民對(duì)表。在城市之間旅游的話(huà),在到達(dá)新地方的時(shí)候需要把懷表校準(zhǔn)。但是,當(dāng)鐵路投入使用之后,越來(lái)越多的人頻繁地長(zhǎng)距離地往來(lái),時(shí)間變得越來(lái)越重要。在鐵路的早期,時(shí)刻表非常讓人迷惑,每一個(gè)所謂的停靠時(shí)間都是基于??康攸c(diǎn)的當(dāng)?shù)貢r(shí)間。時(shí)間的標(biāo)準(zhǔn)化對(duì)于鐵路的高效運(yùn)營(yíng)變得非常重要。
在1878年,加拿大人Sir Sanford Fleming 提議使用一個(gè)全球的時(shí)區(qū)(這個(gè)建議被采納,并衍生了今天我們所使用的全球時(shí)區(qū)的概念),他建議把世界分成24個(gè)時(shí)區(qū),每一個(gè)跨越15度經(jīng)線(xiàn)(因?yàn)榈厍虻慕?jīng)度360度,劃分成24塊后,一塊為15度)。Sir Sanford Fleming的方法解決了一個(gè)全球性的時(shí)間混亂的問(wèn)題。 美國(guó)鐵路公司于1883年11月18日使用了Fleming 提議的時(shí)間方式。1884年一個(gè)國(guó)際子午線(xiàn)會(huì)議在華盛頓召開(kāi),他的目的是選擇一個(gè)合適的本初子午線(xiàn)。大會(huì)最終選定了格林威治為標(biāo)準(zhǔn)的0度。盡管時(shí)區(qū)被確定了下來(lái),但是各個(gè)國(guó)家并沒(méi)有立刻更改他們的時(shí)間規(guī)范,在美國(guó),盡管到1895年已經(jīng)有很多州開(kāi)始使用標(biāo)準(zhǔn)時(shí)區(qū)時(shí)間,國(guó)會(huì)直到1918年才強(qiáng)制使用會(huì)議制定的時(shí)間規(guī)范。 今天各個(gè)國(guó)家使用的是一個(gè)Fleming時(shí)區(qū)規(guī)范的一個(gè)變種,中國(guó)一共跨越了5個(gè)時(shí)區(qū),但是使用了一個(gè)統(tǒng)一的時(shí)間規(guī)范,比Coordinated Universal Time(UTC,格林威制時(shí)間)早8個(gè)小時(shí)。俄羅斯也擁護(hù)這個(gè)時(shí)區(qū)規(guī)范,盡管整個(gè)國(guó)家使用的時(shí)間和標(biāo)準(zhǔn)時(shí)區(qū)提前了1個(gè)小時(shí)。澳大利亞使用3個(gè)時(shí)區(qū),其中主時(shí)區(qū)提前于他按Fleming規(guī)范的時(shí)區(qū)半小時(shí)。很多中東國(guó)家也使用了半時(shí)時(shí)區(qū)(即不是按照Fleming的24個(gè)整數(shù)時(shí)區(qū))。 因?yàn)闀r(shí)區(qū)是對(duì)經(jīng)度進(jìn)行劃分,在南極或者北極工作的科學(xué)家直接使用了UTC時(shí)間,否則南極大陸將被分解成24個(gè)時(shí)區(qū)。 時(shí)區(qū)的轉(zhuǎn)化表如下: UTC Coordinated Universal Time GMT Greenwich Mean Time, 定義為 UTC BST British Summer Time, 定義為 UTC+1 hour IST Irish Summer Time, 定義為 UTC+1 hour WET Western Europe Time, 定義為 UTC WEST Western Europe Summer Time, 定義為 UTC+1 hour CET Central Europe Time, 定義為 UTC+1 CEST Central Europe Summer Time, 定義為 UTC+2 EET Eastern Europe Time, 定義為 UTC+2 EEST Eastern Europe Summer Time, 定義為 UTC+3 MSK Moscow Time, 定義為 UTC+3 MSD Moscow Summer Time, 定義為 UTC+4 AST Atlantic Standard Time, 定義為 UTC-4 hours ADT Atlantic Daylight Time, 定義為 UTC-3 hours NST Newfoundland Standard Time, 定義為 UTC-3.5 hours NDT Newfoundland Daylight Time, 定義為 UTC-2.5 hours EST Eastern Standard Time, 定義為 UTC-5 hours EDT Eastern Daylight Saving Time, 定義為 UTC-4 hours CST Central Standard Time, 定義為 UTC-6 hours CDT Central Daylight Saving Time, 定義為 UTC-5 hours MST Mountain Standard Time, 定義為 UTC-7 hours MDT Mountain Daylight Saving Time, 定義為 UTC-6 hours PST Pacific Standard Time, 定義為 UTC-8 hours PDT Pacific Daylight Saving Time, 定義為 UTC-7 hours HST Hawaiian Standard Time, 定義為 UTC-10 hours AKST Alaska Standard Time, 定義為 UTC-9 hours AKDT Alaska Standard Daylight Saving Time, 定義為 UTC-8 hours AEST Australian Eastern Standard Time, 定義為 UTC+10 hours AEDT Australian Eastern Daylight Time, 定義為 UTC+11 hours ACST Australian Central Standard Time, 定義為 UTC+9.5 hours ACDT Australian Central Daylight Time, 定義為 UTC+10.5 hours AWST Australian Western Standard Time, 定義為 UTC+8 hours 下面給出了一些時(shí)間,請(qǐng)?jiān)诓煌瑫r(shí)區(qū)之間進(jìn)行轉(zhuǎn)化。
- 輸入
- 輸入的第一行包含了一個(gè)整數(shù)N,表示有N組測(cè)試數(shù)據(jù)。接下來(lái)N行,每一行包括一個(gè)時(shí)間和兩個(gè)時(shí)區(qū)的縮寫(xiě),它們之間用空格隔開(kāi)。時(shí)間由標(biāo)準(zhǔn)的a.m./p.m給出。midnight表示晚上12點(diǎn)(12:00 a.m.),noon表示中午12點(diǎn)(12:00 p.m.)。
- 輸出
- 假設(shè)輸入行給出的時(shí)間是在第一個(gè)時(shí)區(qū)中的標(biāo)準(zhǔn)時(shí)間,要求輸出這個(gè)時(shí)間在第二個(gè)時(shí)區(qū)中的標(biāo)準(zhǔn)時(shí)間。
- 樣例輸入
4
noon HST CEST
11:29 a.m. EST GMT
6:01 p.m. CST UTC
12:40 p.m. ADT MSK
- 樣例輸出
midnight
4:29 p.m.
12:01 a.m.
6:40 p.m.
#include<stdio.h>
#include<string.h>
int difference(char*zone1,char*zone2){
char*zone[32]={"UTC","GMT","BST","IST","WET","WEST",
"CET","CEST","EET","EEST","MSK","MSD","AST","ADT",
"NST","NDT","EST","EDT","CST","CDT","MST","MDT","PST",
"PDT","HST","AKST","AKDT","AEST","AEDT","ACST","ACDT",
"AWST"};
float time[32]={0,0,1,1,0,1,1,2,2,3,3,4,-4,-3,-3.5,-2.5,-5,-4,-6,-5,-7,
-6,-8,-7,-10,-9,-8,10,11,9.5,10.5,8};
int i,j;
for(i=0;strcmp(zone[i],zone1);i++);
for(j=0;strcmp(zone[j],zone2);j++);
return(int)((time[i]-time[j])*60);
}
int main()
{int nCases;
scanf("%d",&nCases);
for(int i=0;i<nCases;i++)
{char time[9];
int hours,minutes;
scanf("%s",time);
switch(time[0]){
case 'n':hours=12;
minutes=0;
break;
case 'm':hours=0;
minutes=0;
break;
default:sscanf(time,"%d:%d",&hours,&minutes);
hours%=12;
scanf("%s",time);
if(time[0]=='p')
hours+=12;
}
char timezone1[5],timezone2[5];
scanf("%s%s",timezone1,timezone2);
int newTime;
newTime=hours*60+minutes+difference(timezone2,timezone1);
if(newTime<0)
newTime+=1440;
newTime%=1440;
switch(newTime){
case 0:printf("midnight\n");
break;
case 720:printf("noon\n");
break;
default:hours=newTime/60;
minutes=newTime%60;
if(hours==0)
printf("12:%02d a.m.\n",minutes);
else if(hours<12)
printf("%d:%02d a.m.\n",hours,minutes);
else if(hours==12)
printf("12:%02d p.m.\n",minutes);
else
printf("%d:%02d p.m.\n",hours%12,minutes);
}
}
return 0;
}
|