void BS(int l,int r,vector<Item> &vs){ //答案該<l會有的已經做完了 if(l==r)整個vs的答案=l;//?????? int mid=(l+r)/2; do_thing(l,mid);//做答案<=mid會做的事 vector<Item> left=vs裡滿足的; vector<Item> right=vs-left; undo_thing(l,mid); BS(l,mid,left); do_thing(l,mid); BS(mid+1,r,right);//?????? }
void __attribute__((nonnull (1, 3))) do_other_thing(char *s, int *p, char *q) { do_thing(s, p, q); }
int main(int argc, char * argv[]) { int c; while ((c = getopt(argc, argv, "hp:n:")) != -1) { switch (c) { case 'n': nick = optarg; break; case 'p': port = atoi(optarg); break; case 'h': default: show_usage(argc,argv); } } if (optind >= argc) { show_usage(argc,argv); } setlocale (LC_ALL, ""); host = argv[optind]; char tmphost[512]; sprintf(tmphost, "/dev/net/%s:%d", host, port); int sockfd = open(tmphost, O_RDWR); sock = fdopen(sockfd, "w"); sockb = fdopen(sockfd, "r"); if (!sock) { fprintf(stderr, "%s: Connection failed or network not available.\n", argv[0]); return 1; } main_win = initscr(); start_color(); use_default_colors(); assume_default_colors(-1,-1); for (int bg = 1; bg < 16; ++bg) { for (int fg = 0; fg < 16; ++fg) { init_pair(fg+bg*16, fg, bg); } } for (int fg = 1; fg < 16; ++fg) { init_pair(fg, fg, -1); } int w, h; getmaxyx(main_win, h, w); topic_win = newwin(1, w, 0, 0); body_win = newwin(h-3, w, 1, 0); status_win = newwin(1, w, h-2, 0); input_win = newwin(1, w, h-1, 0); signal(SIGWINCH, SIGWINCH_handler); scrollok(body_win, TRUE); wbkgd(topic_win, COLOR_PAIR(COLOR_WHITE+COLOR_BLUE*16)); wbkgd(body_win, COLOR_PAIR(0)); wbkgd(status_win, COLOR_PAIR(COLOR_WHITE+COLOR_BLUE*16)); wbkgd(input_win, COLOR_PAIR(0)); /* Write the welcome thing to the body */ wprintw(body_win, " - Toaru IRC v. %s - \n", VERSION_STRING); wprintw(body_win, " Copyright 2015 K Lange\n"); wprintw(body_win, " http://toaruos.org - http://github.com/klange/toaruos\n"); wprintw(body_win, "\n"); wprintw(body_win, " For help, type /help.\n"); wmove(topic_win, 0, 0); wprintw(topic_win, " Toaru IRC v. %s", VERSION_STRING); /* Update status */ wmove(status_win, 0, 0); wprintw(status_win, "[%s] ", nick); refresh_all(); pthread_create(&read_thread, NULL, irc_read_thread, NULL); fprintf(sock, "NICK %s\r\nUSER %s * 0 :%s\r\n", nick, nick, nick); fflush(sock); char * buf = malloc(1024); while (1) { spin_lock(&c_lock); wmove(input_win, 0, 0); wprintw(input_win, "[%s] ", channel ? channel : "(none)"); memset(buf, 0, sizeof(buf)); spin_unlock(&c_lock); wgetstr(input_win, buf); do_thing(buf); spin_lock(&c_lock); wclear(input_win); wrefresh(input_win); spin_unlock(&c_lock); } endwin(); return 0; }