演算法競賽入門經典(第2版)習題4-5 IP網路 IP Networks UVa1590
這道題的邏輯很簡單,讀入所有的ip地址,確認總共32位二進位制數中最左一個不同是在哪裡出現的,然後按規則輸出網路地址與子網掩碼即可。
可上傳後我發現它就是wa...還是wa...總是wa......
然後我在網上找到了例程,設想出了很多測試資料,用fc拍來拍去,總是報告“找不到差異”。
我覺得可能是測試資料想得不周全,看到書上註明這個是NEERC 2005的比賽題,於是我找到了這場比賽的官方測試資料。
但fc還是“找不到差異”......
最後我決定往輸出的最末尾新增一個“\n",然後就ac了。這和習題4-3正好相反。
原來如果A文字末尾只有一個"\n”而B文字沒有“\n"的話,fc會無視這種差異,但UVa在乎。
習題4-3與習題4-5你們兩個“磨人的小妖精”......
//#define LOCAL //#define TESTING #include<stdio.h> #include<ctype.h> #include<string.h> #include<iostream> #include<cstdio> #define MAXN 1005 int sec[MAXN][5],mask[5],ip[5]; char sec2[MAXN][40], mask2[40], ip2[40]; void save(char* s, int n, int ind) { int se = 0, temp = 0; for(int i = 0; i <= n; i++) { if(isdigit(s[i])) temp = temp * 10 +s[i]-'0'; else { sec[ind][se] = temp; se++; temp = 0; } } for(int i = 3; i >= 0; i--) { int temp2; temp2 = sec[ind][i]; for(int j = 0; j < 8; j++) { sec2[ind][24-i*8+j] = temp2 % 2+'0'; temp2 /= 2; } } #ifdef TESTING printf("sec[%d]= %d.%d.%d.%d = %s\n", ind, sec[ind][0], sec[ind][1], sec[ind][2], sec[ind][3], sec2[ind]); #endif } void getip(int ind) { memset(ip,0,sizeof(ip)); memset(ip2,0,sizeof(ip2)); for(int i = 0; i < 32; i++) { if(i<ind) ip2[i] = '0'; else ip2[i] = sec2[1][i]; } #ifdef TESTING printf("ip2=%s\n", ip2); #endif for(int i = 0; i < 4; i++) { int n = 1; for(int j = 0; j < 8; j++) { ip[3-i] += (ip2[j+8*i]-'0')*n; n*=2; } } } void getmask(int ind) { memset(mask,0,sizeof(mask)); memset(mask2,0,sizeof(mask2)); for(int i = 0; i < 32; i++) { if(i<ind) mask2[i] = '0'; else mask2[i] = '1'; } #ifdef TESTING printf("mask2="); for(int i = 0; i<32; i++) printf("%c", mask2[i]); printf("\n"); //printf("mask2=%s\n",mask2); #endif for(int i = 0; i < 4; i++) { int n = 1; for(int j = 0; j < 8; j++) { mask[3-i] += (mask2[j+8*i]-'0')*n; n*=2; } } } using namespace std; int main() { #ifdef LOCAL freopen("xt4-5.in", "r", stdin); freopen("xt4-5.out", "w", stdout); #endif memset(sec,0,sizeof(sec)); int N; bool first = true; //while(cin>>N) while(scanf("%d", &N)!=EOF) { for(int i = 1; i <= N; i++) { char temps[MAXN]; scanf("%s", temps); #ifdef TESTING printf("n=%d %s\n", strlen(temps), temps); #endif save(temps,strlen(temps),i); } int byte = 0; for(int i = 2; i <=N; i++) { for(int j = 31; j >= byte; j--) { if(sec2[i][j]!=sec2[1][j]) { byte = j+1; break; } } } getip(byte); getmask(byte); #ifdef TESTING printf("%d\n", byte); #endif if(!first) printf("\n"); for(int i = 0; i < 4; i++) { if(i) printf("."); printf("%d", ip[i]); } printf("\n"); for(int i = 0; i < 4; i++) { if(i) printf("."); printf("%d", mask[i]); } first = false; } printf("\n");//能不能ac就靠這句了 return 0; }
相關推薦
演算法競賽入門經典(第2版)習題4-5 IP網路 IP Networks UVa1590
這道題的邏輯很簡單,讀入所有的ip地址,確認總共32位二進位制數中最左一個不同是在哪裡出現的,然後按規則輸出網路地址與子網掩碼即可。 可上傳後我發現它就是wa...還是wa...總是wa...... 然後我在網上找到了例程,設想出了很多測試資料,用fc拍來拍去,總是報告“找
演算法競賽入門經典(第2版)習題4-5 IP網路UVa1590
#include <stdio.h> #include <string.h> int twoip[1005][35]; void changetwo(int num, int i, int j) { int q, chu = num; //printf("%d %d %d\n",
演算法競賽入門經典(第2版)習題4-3 黑白棋 Othello UVa220
這題邏輯和習題4-1象棋很相似,沒什麼特別的。 第一次提交報wa,添加了若干樣例測試,發現邏輯無誤。 與樣例輸出對拍後發現輸出尾部多了一個換行符,修改後ac。 //#define LOCAL //#define TESTING #include<stdio.h>
演算法競賽入門經典(第2版)習題3-5 謎題(Puzzle) Uva227
C++編寫 #include<iostream> using namespace std; int main() { int x = 2, y = 1; char Pu
UVa220 演算法競賽入門經典(第2版)習題4-3 黑白棋 Othello
老規則 題目解釋看他們的 程式碼看我的。。 可能我的程式碼略微濃縮一些。 。。 。。我找了半天,,程式碼寫的都好長。,要是看懂了題目的話 就看我的程式碼吧。 http://blog.csdn.net/kyoma/article/details/51
演算法競賽入門經典(第2版)習題3-4 週期串 Periodic Strings UVa445
這題把我虐哭了。 提交了13次才ac。 演算法本身沒什麼好說的,UVa上html版和pdf版的輸入輸出格式要求不一樣,以html版為準。 而且html版的輸入輸出格式都有點奇葩,不認真看原文細節是ac不了的。 參考了他的例程,我才找到問題的解決辦法。 UVa評測系統中的空
演算法競賽入門經典(第2版)紫書
紫書 第3章陣列和字串(例題) 例題3-1 TEX Quotes 例題3-2 WERTYU 例題3-3 Palindromes 例題3-4 Master-Mind Hints 例題3-5 Digit Generator 例題3-6 Circular Sequence 紫書
演算法競賽入門經典(第2版)救濟金髮放(The Dole Queue,UVa133)
演算法競賽入門經典(第2版)救濟金髮放(The Dole Queue,UVa133 import java.util.Scanner; /** * @author Joker */ publ
tcp/ip入門經典(第2版) 第十五章 監控和遠端訪問
1.本章內容 telnet berkeley r*工具 ssh 遠端控制 網路管理 snmp rmon 2.網路可以說是為了共享遠端的資源而建立的,所以在網路上做的幾乎所有的事情都可以歸結為遠端訪問。 3.telnet telnet是對遠端計算機進
JavaScript入門經典(第四版)讀書筆記
utc 文件名 ttext 文檔 開頭 rep 顯示 部分 body 第一部分 Web腳本編寫與JavaScript語言的概念 1.document.lastModified() -> 返回文檔修改日期 2.<head>標簽中的<sc
C語言入門經典(第四版).pdf
《C語言入門經典(第4版)》的目標是使你在C語言程式設計方面由一位初學者成為一位稱職的程式設計師。讀者基本不需要具備任何程式設計知識,即可通過《C語言入門經典(第4版)》從頭開始編寫自己的C程式。研讀《C語言入門經典(第4版)》,你就可以成為一位稱職的C語言程式設計師。從許多方面來說,C語言
《C#入門經典(第6版)》學習筆記_第10章_定義類成員
第10章 定義類成員 本章內容: 如何定義類成員 如何使用類圖新增成員 如何控制類成員的繼承 如何定義巢狀的類 如何實現介面 如何使用部分類定義 如何使用Call Hierarchy視窗 10.1 成員定義 在類定義中,也提供了該類中
《C#入門經典(第6版)》學習筆記_第6章_函式
第103頁-第128頁,共26頁。 本章內容: 如何定義和使用不接受任何資料也不返回任何資料的簡單函式 如何在函式中傳入傳出資料 使用變數作用域 如何結合使用Main()函式和命令列引數 如何把函式提供為結構型別的成員 如何使用函式過載 如何使用委託 本章介
《Redis入門指南(第2版)》摘要
緣起 想找一個開源技術點深入下去的,於是找到了redis,比較好的是,他有相應的學習曲線。 全書第1遍用了3h19min的樣子,20181117開始讀的,20181123讀完。還會繼續閱讀第2遍或第3遍,雖然原理性可能不太多,但我還沒有很好的消化它,雖然這本書不是
JavaScript入門經典(第7版)讀書筆記
斷斷續續看了十來天,終於看完了,還是學到些東西,這本書還是不錯的,各方面都有涉及。 補充了下之前不完善的JS 知識 筆記一般只記必要的東西。 Table of Contents 1. JavaScript 基礎 1.1. JavaScript 簡介
演算法競賽入門經典(第二版)第三章陣列和字串習題3-2分子量
給出一種物質的分子式不帶括號,求分子量。本題中的分子式只包含4種原子分別為CHON,原子量分別為12.01,1.008,16.00,14.01(單位g/mol)。例如,C6H5OH的分子量是94.108g/mol #include <stdio.h> int main() {
《演算法競賽入門經典》(第2版)第二章習題
本文部分習題參考了litiouslove的blog: http://blog.csdn.net/litiouslove/article/details/7891700 習題2-1 水仙花數(daffodil) 輸出100~999中的所有水仙花數。若3位數ABC滿足ABC=A3+B3+
《演算法競賽入門經典》(第2版)第一章 部分實驗題
1.5.2資料型別實驗 實驗A1:表示式11111*11111的值是多少?把5個1改成6個1呢?9個1呢? 實驗A2:把實驗A1中的所有數換成浮點數,結果如何? 實驗A3:表示式sqrt(-10)的值是多少?嘗試用各種方式輸出。在計算的過程中系統會報錯嗎? 實驗A4:表示式1.0/
演算法競賽入門經典(第二版)第三章陣列和字串習題3-4週期串
如果一個字串可以由某個長度為k的字串重複多次得到,則稱該串以k為週期。例如abcabcabc以3為週期(注意,它也以6和12為週期)。輸入一個長度不超過80的字串,輸出其最小週期 #include<stdio.h> int main() { char a[100];
演算法競賽入門經典(第二版)第三章陣列和字串習題3-3數數字
把前n(n<=10000)個整數順次解除安裝一起:123456789101112…數一數0~9各出現多少次(輸出10個整數,分別是0,1,…,9出現的次數) #include<stdio.h> #define N 100000 char s[N],temp[10]; i