Windows 7 Command Prompt Commands


Append:
It can be used by programs to open files in another directory as if they were located in the current directory.
Arp:
It is used to display or change entries in the ARP cache..
Assoc:
The assoc command is used to display or change the file type associated with a particular file extension..
At:
The at command is used to schedule commands and other programs to run at a specific date and time..
Attrib:
The attrib command is used to change the attributes of a single file or a directory..
Auditpol:
The auditpol command is used to display or change audit policies..
Bcdedit:
The bcdedit command is used to view or make changes to Boot Configuration Data..
Bitsadmin:
The bitsadmin command is used to create, manage, and monitor download and upload jobs..
Bootcfg:
The bootcfg command is used to build, modify, or view the contents of the boot.ini file, a hidden file that is used to identify in what folder, on which partition, and on which hard drive Windows is located..
Break:
The break command sets or clears extended CTRL+C checking on DOS systems.
Cacls:
The cacls command is used to display or change access control lists of files.
Call:
The call command is used to run a script or batch program from within another script or batch program..
Certreq:
The certreq command is used to perform various certification authority (CA) certificate functions..
Certutil:
The certutil command is used to dump and display certification authority (CA) configuration information in addition to other CA functions..
Change:
The change command changes various terminal server settings like install modes, COM port mappings, and logons..
Chcp:
The chcp command displays or configures the active code page number..
Chdir:
The chdir command is used to display the drive letter and folder that you are currently in. Chdir can also be used to change the drive and/or directory that you want to work in..
Chglogon:
The chglogon command enables, disables, or drains terminal server session logins..
Chgport:
The chgport command can be used to display or change COM port mappings for DOS compatibility..
Chgusr:
The chgusr command is used to change the install mode for the terminal server.
Chkdsk:
The chkdsk command, often referred to as check disk, is used to identify and correct certain hard drive errors.
Chkntfs:
The chkntfs command is used to configure or display the checking of the disk drive during the Windows boot process..
Choice:
The choice command is used within a script or batch program to provide a list of choices and return of the value of that choice to the program..
Cipher:
The cipher command shows or changes the encryption status of files and folders on NTFS partitions..
Clip:
The clip command is used to redirect the output from any command to the clipboard in Windows..
Cls:
The cls command clears the screen of all previously entered commands and other text..
Cmd:
The cmd command starts a new instance of the command interpreter..
Cmdkey:
The cmdkey command is used to show, create, and remove stored user names and passwords..
Cmstp:
The cmstp command installs or uninstalls a Connection Manager service profile..
Color:
The color command is used to change the colors of the text and background within the Command Prompt window.
Comp:
The comp command is used to compare the contents of two files or sets of files.
Compact:
The compact command is used to show or change the compression state of files and directories on NTFS partitions..
Convert:
The convert command is used to convert FAT or FAT32 formatted volumes to the NTFS format..
Copy:
The copy command does simply that - it copies one or more files from one location to another..
Date:
The date command is used to show or change the current date..
Debug:
The debug command starts Debug, a command line application used to test and edit programs..
Defrag:
The defrag command is used to defragment a drive you specify. The defrag command is the command line version of Microsoft's Disk Defragmenter..
Del:
The del command is used to delete one or more files. The del command is the same as the erase command..
Dir:
The dir command is used to display a list of files and folders contained inside the folder that you are currently working in. The dir command also displays other important information like the hard drive's serial number, the total number of files listed, their combined size, the total amount of free space left on the drive, and more..
Diskcomp:
The diskcomp command is used to compare the contents of two floppy disks.
Diskcopy:
The diskcopy command is used to copy the entire contents of one floppy disk to another.
Diskpart:
The diskpart command is used to create, manage, and delete hard drive partitions..
Diskraid:
The diskraid command starts the DiskRAID tool which is used to manage and configure RAID arrays..
Dism:
The dism command starts the Deployment Image Servicing and Management tool (DISM). The DISM tool is used to manage features in Windows images..
Dispdiag:
The dispdiag command is used to output a log of information about the display system..
Doskey:
The doskey command is used to edit command lines, create macros, and recall previously entered commands..
Driverquery:
The driverquery command is used to show a list of all installed drivers..
Echo:
The echo command is used to show messages, most commonly from within script or batch files. The echo command can also be used to turn the echoing feature on or off..
Edit:
The edit command starts the MS-DOS Editor tool which is used to create and modify text files..
Edlin:
The edlin command starts the Edlin tool which is used to create and modify text files from the command line.
Endlocal:
The endlocal command is used to end the localization of environment changes inside a batch or script file.
Erase:
The erase command is used to delete one or more files. The erase command is the same as the del command..
Eventcreate:
The eventcreate command is used to create a custom event in an event log..
Exe2Bin:
The exe2bin command is used to convert a file of the EXE file type (executable file) to a binary file..
Exit:
The exit command is used to end the Command Prompt session that you're currently working in..
Expand:
The expand command is used to extract a single file or a group of files from a compressed file..
Fastopen:
The fastopen command is used to add a program's hard drive location to a special list stored in memory, potentially improving the program's launch time by removing the need for MS-DOS to locate the application on the drive..
Fc:
The fc command is used to compare two individual or sets of files and then show the differences between them..
Find:
The find command is used to search for a specified text string in one or more files..
Findstr:
The findstr command is used to find text string patterns in one or more files.
Finger:
The finger command is used to return information about one or more users on a remote computer that's running the Finger service.
For:
The for command is used to run a specified command for each file in a set of files. The for command is most often used within a batch or script file..
Forfiles:
The forfiles command selects one or more files to execute a specified command on. The forfiles command is most often used within a batch or script file..
Format:
The format command is used to format a drive in the file system that you specify..
Fsutil:
The fsutil command is used to perform various FAT and NTFS file system tasks like managing reparse points and sparse files, dismounting a volume, and extending a volume..
Ftp:
The ftp command can used to transfer files to and from another computer. The remote computer must be operating as an FTP server..
Ftype:
The ftype command is used to define a default program to open a specified file type..
Getmac:
The getmac command is used to display the media access control (MAC) address of all the network controllers on a system..
Goto:
The goto command is used in a batch or script file to direct the command process to a labeled line in the script..
Gpresult:
The gpresult command is used to display Group Policy settings.
Gpupdate:
The gpupdate command is used to update Group Policy settings.
Graftabl:
The graftabl command is used to enable the ability of Windows to display an extended character set in graphics mode.
Graphics:
The graphics command is used to load a program that can print graphics..
Help:
The help command provides more detailed information on any of the other Command Prompt commands..
Hostname:
The hostname command displays the name of the current host..
Icacls:
The icacls command is used to display or change access control lists of files. The icacls command is an updated version of the cacls command..
If:
The if command is used to perform conditional functions in a batch file..
Ipconfig:
The ipconfig command is used to display detailed IP information for each network adapter utilizing TCP/IP. The ipconfig command can also be used to release and renew IP addresses on systems configured to receive them via a DHCP server..
Irftp:
The irftp command is used to transmit files over an infrared link..
Iscsicli:
The iscsicli command starts the Microsoft iSCSI Initiator, used to manage iSCSI.
Label:
The label command is used to manage the volume label of a disk.v Loadfix:
The loadfix command is used to load the specified program in the first 64K of memory and then runs the program..
Lodctr:
The lodctr command is used to update registry values related to performance counters..
Logman:
The logman command is used to create and manage Event Trace Session and Performance logs. The logman command also supports many functions of Performance Monitor..
Logoff:
The logoff command is used to terminate a session..
Mem:
The mem command shows information about used and free memory areas and programs that are currently loaded into memory in the MS-DOS subsystem..
Mkdir (Md) :
The mkdir command is used to create a new folder..
Mklink:
The mklink command is used to create a symbolic link..
Mmc:
The mmc command can be used to open Microsoft Management Console in author mode or to a specific snap-in console, all from the Command Prompt..
Mode:
The mode command is used to configure system devices, most often COM and LPT ports.
More:
The more command is used to display the information contained in a text file. The more command can also be used to paginate the results of any other Command Prompt command.
Mountvol:
The mountvol command is used to display, create, or remove volume mount points..
Move:
The move command is used to move one or files from one folder to another. The move command is also used to rename directories..
Msg:
The msg command is used to send a message to a user..
Msiexec:
The msiexec command is used to start Windows Installer, a tool used to install and configure software.
Mstsc:
The mstsc command starts the Remote Desktop Connection tool from the Command Prompt.
Muiunattend:
The muiunattend command starts the Multilanguage User Interface unattended setup process..
Nbtstat:
The nbtstat command is used to show TCP/IP information and other statistical information about a remote computer..
Net:
The net command is used to display, configure, and correct a wide variety of network settings..
Netcfg:
The netcfg command is used to install the Windows Preinstallation Environment (WinPE), a lightweight version of Windows used to deploy workstations..
Netstat:
The netstat command is most commonly used to display all open network connections and listening ports..
Nlsfunc:
The nlsfunc command is used to load information specific to a particular country or region..
Nltest:
The nltest command is used to test secure channels between Windows computers in a domain and between domain controllers that are trusting other domains..
Nslookup:
The nslookup is most commonly used to display the hostname of an entered IP address. The nslookup command queries your configured DNS server to discover the IP address..
Ocsetup:
The ocsetup command starts the Windows Optional Component Setup tool, used to install additional Windows features.
Openfiles:
The openfiles command is used to display and disconnect open files and folders on a system.
Path:
The path command is used to display or set a specific path available to executable files..
Pathping:
The pathping command functions much like the tracert command but will also report information about network latency and loss at each hop..
Pause:
The pause command is used within a batch or script file to pause the processing of the file. When the pause command is used, a Press any key to continue... message displays in the command window..
Ping:
The ping command sends an Internet Control Message Protocol (ICMP) Echo Request message to a specified remote computer to verify IP-level connectivity..
Pkgmgr:
The pkgmgr command is used to start the Windows Package Manager from the Command Prompt. Package Manager installs, uninstalls, configures, and updates features and packages for Windows..
Pnpunattend:
The pnpunattend command is used to automate the installation of hardware device drivers..
Pnputil:
The pnputil command is used to start the Microsoft PnP Utility, a tool used to install a Plug and Play device from the command line..
Popd:
The popd command is used to change the current directory to the one most recently stored by the pushd command. The popd command is most often utilized from within a batch or script file..
Print:
The print command is used to print a specified text file to a specified printing device.
Prompt:
The prompt command is used to customize the appearance of the prompt text in Command Prompt.
Pushd:
The pushd command is used to store a directory for use, most commonly from within a batch or script program..
Qappsrv:
The qappsrv command is used to display all Remote Desktop Session Host servers available on the network..
Qprocess:
The qprocess command is used to display information about running processes..
Query:
The query command is used to display the status of a specified service..
Quser:
The quser command is used to display information about users currently logged on to the system..
Qwinsta:
The qwinsta command is used to display information about open Remote Desktop Sessions..
Rasdial:
The rasdial command is used to start or end a network connection for a Microsoft client..
Recover:
The recover command is used to recover readable data from a bad or defective disk..
Reg:
The reg command is used to manage the Windows Registry from the command line. The reg command can perform common registry functions like adding registry keys, exporting the registry, etc.
Regsvr32:
The regsvr32 command is used to register a DLL file as a command component in the Windows Registry.
Relog:
The relog command is used to create new performance logs from data in existing performance logs..
Rem:
The rem command is used to record comments or remarks in a batch or script file..
Rename (Ren):
The rename command is used to change the name of the individual file that you specify..
Replace:
The replace command is used to replace one or more files with one or more other files..
Reset Session (Rwinsta):
The reset session command is used to reset the session subsystem software and hardware to known initial values..
Rmdir (Rd):
The rmdir command is used to delete an existing and completely empty folder..
Robocopy:
The robocopy command is used to copy files and directories from one location to another. The robocopy command is superior to the more simple copy command because robocopy supports many more options. This command is also called Robust File Copy..
Route:
The route command is used to manipulate network routing tables..
Rpcping:
The rpcping command is used to ping a server using RPC.
Runas:
The runas command is used to execute a program using another user's credentials.
Sc:
The sc command is used to configure information about services. The sc command communicates with the Service Control Manager..
Schtasks:
The schtasks command is used to schedule specified programs or commands to run a certain times. The schtasks command can be used to create, delete, query, change, run, and end scheduled tasks..
Secedit:
The secedit command is used to configure and analyze system security by comparing the current security configuration to a template..
Set:
The set command is used to enable or disable certain options in Command Prompt..
Setlocal:
The setlocal command is used to start the localization of environment changes inside a batch or script file..
Setver:
The setver command is used to set the MS-DOS version number that MS-DOS reports to a program..
Setx:
The setx command is used to create or change environment variables in the user environment or the system environment..
Sfc:
The sfc command is used to verify and replace important Windows system files. The sfc command is also referred to as System File Checker and Windows Resource Checker..
Shadow:
The shadow command Is used to monitor another Remote Desktop Services session.
Share:
The share command is used to install file locking and file sharing functions in MS-DOS.
Shift:
The shift command is used to change the position of replaceable parameters in a batch or script file..
Shutdown:
The shutdown command can be used to shut down, restart, or log off the current system or a remote computer..
Sort:
The sort command is used to read data from a specified input, sort that data, and return the results of that sort to the Command Prompt screen, a file, or another output device..
Start:
The start command is used to open a new command line window to run a specified program or command. The start command can also be used to start an application without creating a new window..
Subst:
The subst command is used to associate a local path with a drive letter. The subst command is a lot like the net use command except a local path is used instead of a shared network path..
Sxstrace:
The sxstrace command is used to start the WinSxs Tracing Utility, a programming diagnostic tool..
Systeminfo:
The systeminfo command is used to display basic Windows configuration information for the local or a remote computer..
Takeown:
The takedown command is used to regain access to a file that that an administrator was denied access to when reassigning ownership of the file..
Taskkill:
The taskkill command is used to terminate a running task. The taskkill command is the command line equivalent of ending a process in Task Manager in Windows.
Tasklist:
"Displays a list of applications, services, and the Process ID (PID) currently running on either a local or a remote computer.
Tcmsetup:
The tcmsetup command is used to setup or disable the Telephony Application Programming Interface (TAPI) client..
Time:
The time command is used to show or change the current time..
Timeout:
The timeout command is typically used in a batch or script file to provide a specified timeout value during a procedure. The timeout command can also be used to ignore keypresses..
Title:
The title command is used to set the Command Prompt window title..
Tracerpt:
The tracerpt command is used to process event trace logs or real-time data from instrumented event trace providers..
Tracert:
The tracert command sends Internet Control Message Protocol (ICMP) Echo Request messages to a specified remote computer with increasing Time to Live (TTL) field values and displays the IP address and hostname, if available, of the router interfaces between the source and destination..
Tree:
The tree command is used to graphically display the folder structure of a specified drive or path..
Tsdiscon:
The tsdiscon command is used to disconnect a Remote Desktop session..
Tskill:
The tskill command is used to end the specified process.
Type:
The type command is used to display the information contained in a text file.
Typeperf:
The typerperf command displays performance data in the Command Prompt window or writes the data to specified log file..
Tzutil:
The tzutil command is used to display or configure the current system's time zone. The tzutil command can also be used to enable or disable automatic Daylight Saving Time adjustments..
Unlodctr:
The unlodctr command removes Explain text and Performance counter names for a service or device driver from the Windows Registry..
Ver:
The ver command is used to display the current Windows version..
Verify:
The verify command is used to enable or disable the ability of Command Prompt to verify that files are written correctly to a disk..
Vol:
The vol command shows the volume label and serial number of a specified disk, assuming this information exists..
Vssadmin:
The vssadmin command starts the Volume Shadow Copy Service administrative command line tool which displays current volume shadow copy backups and all installed shadow copy writers and providers..
W32Tm:
The w32tm command is used to diagnose issues with Windows Time..
Waitfor:
The waitform command is used to send or wait for a signal on a system.
Wbadmin:
The wbadmin command is used start and stop backup jobs, display details about a previous backup, list the items within a backup, and report on the status of a currently running backup.
Wevtutil:
The wevtutil command starts the Windows Events Command Line Utility which is used to manage event logs and publishers..
Where:
The where command is used to search for files that match a specified pattern..
Whoami:
The whoami command is used to retrieve user name and group information on a network..
Winrm:
The winrm command is used to start the command line version of Windows Remote Management, used to manage secure communications with local and remote computers using web services..
Winrs:
The winrs command is used to open a secure command window with a remote host..
Winsat:
The winsat command starts the Windows System Assessment Tool, a program that assesses various features, attributes, and capabilities of a computer running Windows..
Wmic:
The wmic command starts the Windows Management Instrumentation Command line (WMIC), a scripting interface that simplifies the use of Windows Management Instrumentation (WMI) and systems managed via WMI..
Xcopy:
The xcopy command can copy one or more files or directory trees from one location to another.

vi/vim cheat sheet


My vi/vim cheatsheet

Cursor movement

  • h - move left
  • j - move down
  • k - move up
  • l - move right
  • w - jump by start of words (punctuation considered words)
  • W - jump by words (spaces separate words)
  • e - jump to end of words (punctuation considered words)
  • E - jump to end of words (no punctuation)
  • b - jump backward by words (punctuation considered words)
  • B - jump backward by words (no punctuation)
  • 0 - (zero) start of line
  • ^ - first non-blank character of line
  • $ - end of line
  • G - Go To command (prefix with number - 5G goes to line 5)

Note: Prefix a cursor movement command with a number to repeat it. For example, 4j moves down 4 lines.

Insert Mode - Inserting/Appending text

  • i - start insert mode at cursor
  • I - insert at the beginning of the line
  • a - append after the cursor
  • A - append at the end of the line
  • o - open (append) blank line below current line (no need to press return)
  • O - open blank line above current line
  • ea - append at end of word
  • Esc - exit insert mode

Editing

  • r - replace a single character (does not use insert mode)
  • J - join line below to the current one
  • cc - change (replace) an entire line
  • cw - change (replace) to the end of word
  • c$ - change (replace) to the end of line
  • s - delete character at cursor and subsitute text
  • S - delete line at cursor and substitute text (same as cc)
  • xp - transpose two letters (delete and paste, technically)
  • u - undo
  • . - repeat last command

Marking text (visual mode)

  • v - start visual mode, mark lines, then do command (such as y-yank)
  • V - start Linewise visual mode
  • o - move to other end of marked area
  • Ctrl+v - start visual block mode
  • O - move to Other corner of block
  • aw - mark a word
  • ab - a () block (with braces)
  • aB - a {} block (with brackets)
  • ib - inner () block
  • iB - inner {} block
  • Esc - exit visual mode

Visual commands

  • > - shift right
  • < - shift left
  • y - yank (copy) marked text
  • d - delete marked text
  • ~ - switch case

Cut and Paste

  • yy - yank (copy) a line
  • 2yy - yank 2 lines
  • yw - yank word
  • y$ - yank to end of line
  • p - put (paste) the clipboard after cursor
  • P - put (paste) before cursor
  • dd - delete (cut) a line
  • dw - delete (cut) the current word
  • x - delete (cut) current character

Exiting

  • :w - write (save) the file, but don't exit
  • :wq - write (save) and quit
  • :q - quit (fails if anything has changed)
  • :q! - quit and throw away changes

Search/Replace

  • /pattern - search for pattern
  • ?pattern - search backward for pattern
  • n - repeat search in same direction
  • N - repeat search in opposite direction
  • :%s/old/new/g - replace all old with new throughout file
  • :%s/old/new/gc - replace all old with new throughout file with confirmations

Working with multiple files

  • :e filename - Edit a file in a new buffer
  • :bnext (or :bn) - go to next buffer
  • :bprev (of :bp) - go to previous buffer
  • :bd - delete a buffer (close a file)
  • :sp filename - Open a file in a new buffer and split window
  • ctrl+ws - Split windows
  • ctrl+ww - switch between windows
  • ctrl+wq - Quit a window
  • ctrl+wv - Split windows vertically

Another good vim commands cheatsheet

C++ String references with example


C++ String Examples
constructors 1.

#include <iostream> #include <string> using namespace std; int main () { char *line = "short line for testing"; // with no arguments string s1; s1 = "Anatoliy"; cout << "s1 is: " << s1 << endl; // copy constructor string s2 (s1); cout << "s2 is: " << s2 << endl; // one argumen string s3 (line); cout << "s3 is: " << s3 << endl; // first argumen C string // second number of characters string s4 (line,10); cout << "s4 is: " << s4 << endl; // 1 - C++ string // 2 - start position // 3 - number of characters string s5 (s3,6,4); // copy word 'line' from s3 cout << "s5 is: " << s5 << endl; // 1 - number characters // 2 - character itself string s6 (15,'*'); cout << "s6 is: " << s6 << endl; // 1 - start iterator // 2 - end iterator string s7 (s3.begin(),s3.end()-5); cout << "s7 is: " << s7 << endl; // you can instantiate string with assignment string s8 = "Anatoliy"; cout << "s8 is: " << s8 << endl; return 0; } OUTPUT: // s1 is: Anatoliy // s2 is: Anatoliy // s3 is: short line for testing // s4 is: short line // s5 is: line // s6 is: *************** // s7 is: short line for te // s8 is: Anatoliy getline 1.
/* 1 getline ( intut_stream, str, delim ); Extracts characters from intut_stream and stores them in str until s.max_size() characters have been extracted, the end of file occurs, or delim is encountered, in which case delim is extracted from istr but is not stored in s 2 getline( Iter, str ) Inputs a string value for str as in the preceding func­ tion with delim = */
#include <iostream> #include <string> #include <vector> #include <fstream> using namespace std; int main () { string str; cout << "Enter string (EOL = $) : "; getline (cin, str, '$'); cout << "Str is : " << str << endl; ifstream In("data.dat"); vector v; cout << endl << "Read data from file" << endl; while ( ! In.eof() ) { getline (In, str); v.push_back(str); } copy (v.begin(),v.end(), ostream_iterator(cout,"\n")); cout << endl; return 0; } OUTPUT: // Enter string (EOL = $) : Str is : first line // second line$ // // Read data from file // file: "data.dat" // second line // last line << >> operators 1.
#include <iostream> #include <string> using namespace std; int main () { string str; cout << "Enter string for testing : "; cin >> str; cout << "\nString is : " << str << endl; cout << "Enter string for testing " << "(d to quit) : "; while ( cin >> str ) { cout << endl; cout << "String is : " << str << endl; cout << "Enter string for testing " << "(d to quit) : "; } return 0; } OUTPUT: // Enter string for testing : first // String is : first // Enter string for testing (d to quit) : second // String is : second // Enter string for testing (d to quit) : third // String is : third // Enter string for testing (d to quit) : + += = operators 1.
#include <iostream> #include <string> using namespace std; int main () { string str = "Hello"; cout << "str is : " << str << endl; str += ","; str += ' '; cout << "str is : " << str << endl; string s; s = str + "World"; cout << "s is : " << s << endl; char ch = '!'; s += ch; cout << "s is : " << s << endl; return 0; } OUTPUT: // str is : Hello // str is : Hello, // s is : Hello, World // s is : Hello, World! append 1.
#include <iostream> #include <string> using namespace std; int main () { string str = "Nobody is perfect"; string s = ""; // empty string char *ch = "abcdef"; // append string str at the end of s; // return s // appends at the end of s a copy of the n characters // in str, starting at position pos; if n is too // large, characters are copied only until the end // of str is reached; // returns s s.append(str,0,6); cout << "s is : " << s << endl; // appends copies of the characters in the range [inpIt1, // inpIt2] to s; returns s string::iterator inpIt1 = str.begin()+6; //start from ' is' string::iterator inpIt2 = str.end(); s.append(inpIt1,inpIt2); cout << "s is : " << s << endl; // appends three ! s.append(3,'!'); cout << "s is : " << s << endl; // appends the first n characters in ch at the end // of s; returns s s.append(ch,3); cout << "s is : " << s << endl; // appends charArray at the end of s; returns s s.append(ch,3); cout << "s is : " << s << endl; return 0; } OUTPUT: // s is : Nobody // s is : Nobody is perfect // s is : Nobody is perfect!!! // s is : Nobody is perfect!!!abc // s is : Nobody is perfect!!!abcabc assign 1.
#include <iostream> #include <string> using namespace std; int main () { string str = "Nobody is perfect"; string s = ""; char *ch = "Robert Frost"; // assigns a copy of str to s; returns s s.assign(str); cout << "s is : " << s << endl; // assigns to s a copy of the n characters in str, start­ // ing at position 10: if n is too large, characters are // copied only until the end of str is reached: returns s s.assign(str,10,7); // perfect cout << "s is : " << s << endl; // assigns to s a string consisting of the first n charac­ // ters in ch: returns s s.assign(ch,6); cout << "s is : " << s << endl; // assigns to s a copy of ch: returns s s.assign(ch); cout << "s is : " << s << endl; // assigns to s a string consisting of the characters in // the range str.begin(), str.end(); returns s s.assign(str.begin(),str.end()); cout << "s is : " << s << endl; // assigns to s a string consisting of n copies of ch; // returns s s.assign(17,'*'); cout << "s is : " << s << endl; return 0; } OUTPUT: // s is : Nobody is perfect // s is : perfect // s is : Robert // s is : Robert Frost // s is : Nobody is perfect // s is : ***************** at 1.
// returns s[pos]
#include <iostream> #include <string> using namespace std; int main () { string s = "Nobody is perfect"; // Returns s[pos] for ( int pos = 0; pos < s.length(); ++pos ) cout << s.at(pos) << " "; cout << endl; return 0; } OUTPUT: // N o b o d y i s p e r f e c t begin 1.
// Returns an iterator positioned at the // first character in a string
#include <iostream> #include <string> using namespace std; int main () { string str = "C++ is best computer language"; string::iterator It = str.begin(); while ( It != str.end() ) { if ( *It == ' ' ) *It = '\n'; cout << *It++; } cout << endl; return 0; } OUTPUT: // C++ // is // best // computer // language c_str 1.
// returns (the base address of) a char // array containing the characters stored in s, // terminated by a null character.
#include <iostream> #include <string> using namespace std; int main () { string str = "Anatoliy"; char *ary = new char[str.length()+1]; // strcpy ( ary, str ); that is wrong way strcpy ( ary, str.c_str() ); // that is correct cout << ary << endl; return 0; } OUTPUT: // Anatoliy capacity 1.
// returns the size (of type size_type) // of the storage allocated in string
#include <iostream> #include <string> using namespace std; int main () { string str = "C++ is best computer language"; string::size_type cap; cap = str.capacity(); cout << "Capacity of str is: " << cap << endl; cout << "Size of str is : " << str.size() << endl; cout << "Length of str is : " << str.length() << endl; cout << "Resize the str for 50 character" << endl; str.resize(50); cap = str.capacity(); cout << "Capacity of str is: " << cap << endl; cout << "Size of str is : " << str.size() << endl; cout << "Length of str is : " << str.length() << endl; return 0; } OUTPUT: // Capacity of str is: 32 // Size of str is : 29 // Length of str is : 29 // Resize the str for 50 character // Capacity of str is: 64 // Size of str is : 50 // Length of str is : 50 compare 1.
#include <iostream> #include <string> using namespace std; int main () { string str1 = "string"; string str2 = "String"; string str3 = "second string"; char ch[] = "first string"; cout << "string str1 is : " << str1 << endl; cout << "string str2 is : " << str2 << endl; cout << "char ary ch is : " << ch << endl; cout << "string str3 is : " << str3 << endl; cout << endl; // compare str1 and str2 cout << "1." << endl; size_t comp = str1.compare(str2); cout << "String str1 is "; ( comp == 0 ) ? cout << "equal" : cout << "not equal"; cout << " to string str2" << endl; // compare str1 and literal string "string" cout << "2." << endl; comp = str1.compare("string"); cout << "String str1 is "; ( comp == 0 ) ? cout << "equal" : cout << "not equal"; cout << " to array of char \"string\"" << endl; // 3. and 4. doesn't work with Microsoft // Visual Studio compiler // compare str3 start from pos 7 to 5 // with str1 cout << "3." << endl; comp = str3.compare(str1,7,5); cout << "Part of string str3 is "; ( comp == 0 ) ? cout << "equal" : cout << "not equal"; cout << " to str1" << endl; // compare str3 start from pos 7 // with literal string "string" cout << "4." << endl; comp = str3.compare("string",7); cout << "Part of string str3 is "; ( comp == 0 ) ? cout << "equal" : cout << "not equal"; cout << " to C string \"string\"" << endl; // next 4 'compare' functions // doesn't work with GNU compiler cout << "5." << endl; comp = str1.compare(6,10,ch); cout << "String str1 is "; ( comp == 0 ) ? cout << "equal" : cout << "not equal"; cout << " to part of char ary \"first string\"" << endl; cout << "6." << endl; comp = str1.compare(0,3,str3); cout << "Part of str1 is "; ( comp == 0 ) ? cout << "equal" : cout << "not equal"; cout << " to string \"second string\"" << endl; cout << "7." << endl; comp = str1.compare(1,3,str2,1,3); cout << "String str1 is "; ( comp == 0 ) ? cout << "equal" : cout << "not equal"; cout << " to part of string \"second string\"" << endl; cout << "8." << endl; comp = str1.compare(1,3,str2,1,3); cout << "String str1 is "; ( comp == 0 ) ? cout << "equal" : cout << "not equal"; cout << " to part of string \"second string\"" << endl; return 0; } OUTPUT: GNU compiler // string str1 is : string // string str2 is : String // char ary ch is : first string // string str3 is : second string // // 1. // String str1 is not equal to string str2 // 2. // String str1 is equal to array of char "string" // 3. // Part of string str3 is equal to str1 // 4. // Part of string str3 is equal to C string "string" // 5. // 6. // 7. // 8. OUTPUT: Microsoft Visual Studio compiler // string str1 is : string // string str2 is : String // char ary ch is : first string // string str3 is : second string // // 1. // String str1 is not equal to string str2 // 2. // String str1 is equal to array of char "string" // 3. // 4. // 5. // String str1 is not equal to part of char ary "first // string" // 6. // Part of str1 is not equal to string "second string" // 7. // String str1 is equal to part of string "second string" // 8. // String str1 is equal to part of string "second string" // Press any key to continue copy 1.
#include <iostream> #include <string> using namespace std; int main () { string str = "First Name: Robert"; char fname[255]; cout << "str is: " << str << endl; int n = str.find(':'); str.copy(fname, // copy to array n+1, // how many char 0); // start position from str // must terminate fname with '\0'; fname[n+1] = 0; cout << "fname is: " << fname << endl; return 0; } OUTPUT: // str is: First Name: Robert // fname is: First Name: empty 1.
#include <iostream> #include <string> using namespace std; int main () { string str = "*******"; while ( ! str.empty() ) { cout << str << endl; str.erase(str.end()-1); } cout << endl; return 0; } OUTPUT: // ******* // ****** // ***** // **** // *** // ** // * end 1.
// returns an iterator porsitioned immediately // after the last character in string
#include <iostream> #include <string> using namespace std; int main () { string s; string str = "*************************"; size_t pos = str.length(); while ( pos ) { s.assign ( str.begin(),str.end() - pos+1); cout << s << endl; pos -= 5; } return 0; } OUTPUT: // * // ****** // *********** // **************** // ********************* erase 1.
#include <iostream> #include <string> #include <algorithm> using namespace std; int main () { string str, s; for ( char ch = 'a'; ch <= 'z'; ch++ ) str.append(1,ch); s = str; cout << "str is: " << str << endl; cout << "s is: " << str << endl; // removes 13 characters from the beginning str.erase(0,13); cout << "Erased range fron str : " << str << endl; // removes 13 characters starts from 14 str = s.erase(13,13); cout << "Erased range from s : " << str << endl; // removes one character pointed by s.begin() cout << endl << "Erase one, second character from s" << endl; s.erase(s.begin()+1); cout << "s is: " << s << endl; // removes range of characters s.erase(s.begin(),s.begin()+4); cout << "s is: " << s << endl; return 0; } OUTPUT: // str is: abcdefghijklmnopqrstuvwxyz // s is: abcdefghijklmnopqrstuvwxyz // Erased range fron str : nopqrstuvwxyz // Erased range from s : abcdefghijklm // // Erase one, second character from s // s is: acdefghijklm // s is: fghijklm find 1.
#include <iostream> #include <string> #include <algorithm> using namespace std; int main () { string str("C++ is best language"); int pos1, pos2; // size_t or size_type // work not correct // search for first string "best" inside of str // default position is 0 pos1 = str.find ("best"); cout << "Word best is found on position " << pos1+1 << endl; // if pattern is not found - return -1 pos2 = str.find ("best",pos1+1); cout << "Word best is found on position " << pos2+1 << endl; // search for first occurrence of character pos1 = str.find('g'); cout << "First character 'g' found on position " << pos1 << endl; // search for first occurrence of string string s = "is"; pos1 = str.find (s); cout << "Word 'is' is found on position " << pos1+1 << endl; return 0; } OUTPUT: // Word best is found on position 8 // Word best is found on position 0 // First character 'g' found on position 15 // Word 'is' is found on position 5 find_first_not_of 1.
#include <iostream> #include <string> using namespace std; int main () { string str("C++ is best language"); cout << "str is: " << str << endl; int n = str.find_first_not_of("aeiouAEIOU"); cout << "First consonant found at " << n+1 << " position" << endl; return 0; } OUTPUT: // str is: C++ is best language // First consonant found at 1 position find_first_not_of 2.
#include <iostream> #include <string> using namespace std; int main () { string str("C++ is best language"); cout << "str is: " << str << endl; // search first not ' ', // start from position 7 int n = str.find_first_not_of(' ',7); cout << "first not of space character " << "found at position " << n+1 << endl; return 0; } OUTPUT: // str is: C++ is best language // first not of space character found at position 8 find_first_not_of 3.
#include <iostream> #include <string> using namespace std; int main () { string str("C++ is best language"); string s = "C++"; cout << "str is: " << str << endl; // search character from pattern // using the first x chåracters in pattern. // the value position must be given int n = str.find_first_not_of("CBCD",0,3); cout << "first not 'C' is found at position " << n+1 << endl; // search first not of // pattern is string n = str.find_first_not_of(s); cout << "first not of C++ is found " << "at position " << n+1 << endl; return 0; } OUTPUT: // str is: C++ is best language // first not 'C' is found at position 2 // first not of C++ is found at position 4 find_first_of 1.
#include <iostream> #include <string> using namespace std; int main () { string str("C++ is best language"); string s = "be"; cout << "str is: " << str << endl; // search be start from position 2 // if position is ommited - default is 0 int n = str.find_first_of(s,2); cout << "first 'be' found at position " << n+1 << endl; // same as above but search for character n = str.find_first_of('l'); cout << "first character 'l' found at " << "position " << n+1 << endl; // search 'first of' for the characters in // charary char charary[] = " bea"; cout << "charary[] = \" bea\"" << endl; n = str.find_first_of(charary,0); cout << "first character from charary " << "found at position " << n+1 << endl; cout << "Note: position 4 is space" << endl; // same as above but third argumen is // number of character from which searching // starts // this variant of find_first_of dosn't // work properly with GNU compiler n = str.find_first_of(" bae",0,3); cout << "first character from charary " << "found at position " << n+1 << endl; return 0; } OUTPUT: // str is: C++ is best language // first 'be' found at position 8 // first character 'l' found at position 13 // charary[] = " bea" // first character from charary found at position 4 // Note: position 4 is space // first character from charary found at position 4 find_last_not_of 1.
#include <iostream> #include <string> using namespace std; int main () { string str("C++ is best language"); string s = "langue"; int pos = str.length()-1; cout << "str is: " << str << endl; // returns the highest position <= pos of a character // in str that does not match any charcter in s; // returns nopos if there is no such position: // npos is the default value for pos int n = str.find_last_not_of(s, pos); cout << "last_not_of 'langue' found at position " << n+1 << endl; // same as above but search for single character n = str.find_last_not_of('e'); cout << "last_not_of 'e' found at position " << n+1 << endl; char ary[] = "be"; // seawrch for occurence last_not_of // from pattern ary in str n = str.find_last_not_of(ary); cout << "last_not_of 'be' found at position " << n+1 << endl; return 0; } OUTPUT: // str is: C++ is best language // last_not_of 'langue' found at position 12 // last_not_of 'e' found at position 19 // last_not_of 'be' found at position 19 find_last_of 1.
#include <iostream> #include <string> using namespace std; int main () { string str("C++ is best language"); string s = "g"; cout << "str is: " << str << endl; cout << "s is: " << s << endl; int n = str.find_last_of(s); cout << "last_of '" << s << "' faund" << " at position " << n+1 << endl; n = str.find_last_of(' '); cout << "last_of ' ' faund" << " at position " << n+1 << endl; n = str.find_last_of(" la"); cout << "last_of \" la\" faund" << " at position " << n+1 << endl; return 0; } OUTPUT: // str is: C++ is best language // s is: g // last_of 'g' faund at position 19 // last_of ' ' faund at position 12 // last_of " la" faund at position 18 insert 1.
#include <iostream> #include <string> using namespace std; int main () { string str = "C++ language"; string s = "is best"; char ch[] = "C++ language"; cout << "str is: " << str << endl; cout << "s is: " << s << endl; cout << "ch is: " << s << endl; // insert a copy of s into str // at position pos; string::size_type pos = 4; str.insert(pos,s); cout << "str is: " << str << endl; // insert a copy of ch into str at // the position specified by iterator // return an iterator positioned at // this copy int n = str.find('l'); str.insert(str.begin() + n,' '); cout << "str is: " << str << endl; // like above but n x copies of char str.insert(str.end(),3,'!'); cout << "str is: " << str << endl; // insert 4 char from ch into s // at the position 0 s.insert(0,ch,4); cout << "s is: " << s << endl; // insert 8 characters from str // start from position n ('langu...') // into s at position x (end string) n = str.find('l'); int x = s.length(); s.insert(x,str,n,8); cout << "s is: " << s << endl; n = s.find('l'); s.insert(s.begin()+n,' '); cout << "s is: " << s << endl; // insert range (begin - begin+7) of str // into s at position begin+4 s.insert(s.begin()+4,str.begin(),str.begin()+7); cout << "s is: " << s << endl; return 0; } OUTPUT: // str is: C++ language // s is: is best // ch is: is best // str is: C++ is bestlanguage // str is: C++ is best language // str is: C++ is best language!!! // s is: C++ is best // s is: C++ is bestlanguage // s is: C++ is best language // s is: C++ C++ is is best language length 1.
#include <iostream> #include <string> using namespace std; int main () { string str = "C++ is best computer language"; cout << "str is: " << str << endl; cout << "Length of str is : " << str.length() << endl; return 0; } OUTPUT: // str is: C++ is best computer language // Length of str is : 29 max_size 1.
// returns a reverse iterator positioned // at the last character in string
#include <iostream> #include <string> using namespace std; int main () { string str = "C++ is best computer language"; cout << "str is: " << str << endl; cout << "max_size of str is: " << str.max_size() << endl; return 0; } OUTPUT: // str is: C++ is best computer language // max_size of str is: 4294967294 rbegin 1.
#include <iostream> #include <string> using namespace std; int main () { string str = "C++ is best computer language"; cout << "str is: " << str << endl; // usual iterator doesn't work string::reverse_iterator It = str.rbegin(); while ( It != str.rend() ) cout << *It++; cout << endl; return 0; } OUTPUT: // str is: C++ is best computer language // egaugnal retupmoc tseb si ++C replace 1.
#include <iostream> #include <string> using namespace std; int main () { string str = "STL is created from Dennis Ritchie"; string s1 = "was"; string s2 = "developed"; string s3 = "Stepanov alexander"; cout << "str is: " << str << endl; cout << "replace 'is' for 'was'" << endl; str.replace(4, // start position in str 2, // how many characters s1); // source for replasment cout << "str is: " << str << endl; cout <<"replace 'created' for 'developed'" << endl; int n = str.find('c'); // pos of 'created' int x = str.find("from") -1; str.replace(str.begin()+n,// start pointer str.begin()+x, // end pointer s2); // source cout << "str is: " << str << endl; cout << "replace 'Dennis' for 'alexander'" << endl; int x1 = str.find('D'); // search Dennis int x2 = str.find(' ',x1+1); // space after int y1 = s3.find("alex"); // search 'alex' int y2 = strlen("alexander"); str.replace(x1, // start position in str x2-x1, // how characters to replace s3, // source for replacement y1, // start positio from source y2); // how chracter start from y1 cout << "str is: " << str << endl; cout << "replace 'from' for 'by'" << endl; char ary[] = "bytes"; n = str.find("from"); // same variant possible with iterators // instead of number of position str.replace(n, // start position in str 4, // how many characters ary, // source 2); // first 2 characters from source cout << "str is: " << str << endl; cout << "replace 'a' for 'A' (alexander)" << endl; n = str.find("alexander"); str.replace(n, // start position in str 1, // how character(s) 1, // how many copies of character 'A'); // character for replasment cout << "str is: " << str << endl; cout << "replace 'Ritchie' for 'Stepanov'" << endl; x1 = str.find('R'); y1 = s3.find(' '); str.replace(str.begin()+x1, // start pointer str.end(), // to the end of str s3.begin(), // start pointer from source s3.begin()+y1 // end pointer from ); // source cout << "str is: " << str << endl; return 0; } OUTPUT: // str is: STL is created from Dennis Ritchie // replace 'is' for 'was' // str is: STL was created from Dennis Ritchie // replace 'created' for 'developed' // str is: STL was developed from Dennis Ritchie // replace 'Dennis' for 'alexander' // str is: STL was developed from alexander Ritchie // replace 'from' for 'by' // str is: STL was developed by alexander Ritchie // replace 'a' for 'A' (alexander) // str is: STL was developed by Alexander Ritchie // replace 'Ritchie' for 'Stepanov' // str is: STL was developed by Alexander Stepanov reverse 1.
#include <iostream> #include <string> using namespace std; int main () { string str = "Anatoliy Urbanskiy"; cout << str.reverse() << endl; return 0; } OUTPUT: resize 1.
// if <=s.size(), truncates rightmost // character in s to make it of size n; otherwise, adds // copies of character ch to end of s to increase it size // to n, or adds a default character value (usually a // blank) if ch is omitted; return type is void
#include <iostream> #include <string> using namespace std; int main () { string str = "Alexander Stepanov"; cout << "str is: " << str << endl; cout << "size of str is: " << str.size() << endl; str.resize(11); cout << "after str.resize(11)" << endl; cout << "str is: " << str << endl; cout << "size of str is: " << str.size() << endl; str.resize(20,'.'); cout << "after str.resize(20,'.')" << endl; cout << "str is: " << str << endl; cout << "size of str is: " << str.size() << endl; return 0; } OUTPUT: // str is: Alexander Stepanov // size of str is: 18 // after str.resize(11) // str is: Alexander S // size of str is: 11 // after str.resize(9,'.') // str is: Alexander S......... // size of str is: 20 rfind 1.
#include <iostream> #include <string> using namespace std; int main () { string str = "We go step by step to the target"; string s1 = "step"; cout << "str is: " << str << endl; cout << "s1 is: " << s1 << endl; cout << "int n1 = str.find(s1)" << endl; int n1 = str.find(s1); cout << "n1 = " << n1+1 << endl; cout << "int n2 = str.rfind(s1)" << endl; int n2 = str.rfind(s1); cout << "n2 = " << n2+1 << endl; cout << "n3 = str.rfind(s1,n2-1)" << endl; int n3 = str.rfind(s1,n2-1); cout << "n3 = " << n3+1 << endl; cout << "n1 = str.rfind('t')" << endl; n1 = str.rfind('t'); cout << "n1 = " << n1+1 << endl; cout << "n2 = str.rfind('t',n1-1)" << endl; n2 = str.rfind('t',n1-1); cout << "n2 = " << n2+1 << endl; char ch[] = "step"; cout << "char ch[] = \"step\"" << endl; cout << "n1 = str.rfind(ch)" << endl; n1 = str.rfind(ch); cout << "n1 = " << n1+1 << endl; cout << "n2 = str.rfind(\"stabc\",10,2)" << endl; n2 = str.rfind("stabc", // pattern 10, // start position 2); // for first 2 char // in pattern cout << "n2 = " << n2+1 << endl; return 0; } OUTPUT: // str is: We go step by step to the target // s1 is: step // int n1 = str.find(s1) // n1 = 7 // int n2 = str.rfind(s1) // n2 = 15 // n3 = str.rfind(s1,n2-1) // n3 = 7 // n1 = str.rfind('t') // n1 = 32 // n2 = str.rfind('t',n1-1) // n2 = 27 // char ch[] = "step" // n1 = str.rfind(ch) // n1 = 15 // n2 = str.rfind("stabc",10,2) // n2 = 7 size 1.
#include <iostream> #include <string> using namespace std; int main () { string str = "We go step by step to the target"; string::size_type size = str.size(); cout << "str is: " << str << endl; cout << "size of str = " << size << endl; return 0; } OUTPUT: // str is: We go step by step to the target // size of str = 32 substr 1.
// str.subsr(pos,n); // returns a copy of the substring consisting // of n characters from str, beginning at position pos // (default value 0); if n is too large or is omitted, // characters are copied only until the end of s is // reached
#include <iostream> #include <string> using namespace std; int main () { string str = "We go step by step to the target"; cout << "str is: " << str << endl; int n = str.find("step"); string s = str.substr(n); cout << "s is: " << s << endl; s = str.substr(n,12); cout << "s is: " << s << endl; return 0; } OUTPUT: // str is: We go step by step to the target // s is: step by step to the target // s is: step by step swap 1.
#include <iostream> #include <string> using namespace std; int main () { string str1 = "Robert"; string str2 = "Forest"; cout << "str1 is: " << str1 << endl; cout << "str2 is: " << str2 << endl; cout << endl; cout << "str1.swap(str2)" << endl; cout << endl; str1.swap(str2); cout << "str1 is: " << str1 << endl; cout << "str2 is: " << str2 << endl; return 0; } OUTPUT: // str1 is: Robert // str2 is: Forest // // str1.swap(str2) // // str1 is: Forest // str2 is: Robert

Strongly Connected Component (Tarjan)


 
vector< int > M[MX];
int color[MX],f[MX],low[MX],ftm,st[MX],top,scc;
bool instack[MX];
void dfs(int u){
	int i,v,sz;
	f[u] = ftm;
	low[u] = ftm;
	ftm++;
	st[top] = u;top++;instack[u] = true;
	sz = M[u].size();
	color[u] = 1;
	for(i=0;i<sz;i++){
		v = M[u][i];
		if(!color[v]){
			dfs(v);
			low[u] = _min(low[u],low[v]);
		}
		else if(instack[v])low[u] = _min(low[u],f[v]);
	}
	if(f[u] == low[u]){
		scc++;
		do{
			v = st[top-1];top--;instack[v] = false;
			printf(" %d",v);
		}while(top && v!=u);
		printf("\n");
	}
}
//n = no.of vertices, m = no.of edges
void tarjanscc(int n){
	int i;
	ftm = top = 0;
	memset(color,0,sizeof(color));
	memset(f,0,sizeof(f));
	memset(low,0,sizeof(low));
	memset(instack,0,sizeof(instack));
	for(i=0;i<n;i++){
		if(!color[i])dfs(i);
	}
	printf("total scc: %d\n",scc);
	for(i=0;i<=n;i++)M[i].clear();
}

Maximum Flow (basic)


 
vector < int > M[mx];
int pre[mx], cap[mx][mx];
bool color[mx];
int bfs(int s, int t){
	int ok,u,v,sz,i,path_cap;
	memset(pre,-1,sizeof(pre));
	memset(color,0,sizeof(color));
	queue < int > q;
	
	color[s] = 1;
	q.push(s);
	ok = 1;
	while(!q.empty() && ok){
		u = q.front();
		q.pop();
		sz = M[u].size();
		for(i=0;i<sz;i++){
			v = M[u][i];
			if(!color[v] && cap[u][v] > 0){
				q.push(v);
				color[v] = 1;
				pre[v] = u;
				if(v==t){ok = 0;break;}
			}
		}
	}
	path_cap = inf;
	u = t;
	while(pre[u]!=-1){
		v = pre[u];
		path_cap = _min(path_cap, cap[v][u]);
		u = v;
	}
	u = t;
	while(pre[u]!=-1){
		v = pre[u];
		cap[v][u] -= path_cap;
		cap[u][v] += path_cap;
		u = v;
	}
	if(path_cap==inf)return 0;
	return path_cap;
}

int max_flow(int s, int t){
	int r,pcap;
	r = 0;
	while(true){
		pcap = bfs(s,t);
		if(!pcap)break;
		r += pcap;
	}
	return r;
}

Minimum Spanning Tree (Kruskal)


 
struct node {
    int u,v,w;
    bool operator  < ( const node &b) const{
        return w<b.w;
    }
}e[mx];
int pr[mx];

int find(int r) { return r==pr[r]?r:(pr[r]=find(pr[r])); }

int mst(int n,int m){
    int i,u,v,r=0;
    for(i=1;i<=n;i++) pr[i]=i;
    sort(e,e+m);
    for(i=0;i<m;i++) {
        u=find(e[i].u);
        v=find(e[i].v);
        if(u!=v) {
            r+=e[i].w;
            pr[u]=v;
        }
    }
    return r;
}

Max flow with min cut


 
vector < int > M[mx];
i64 cap[mx][mx], CAP[mx][mx];
int pre[mx];
bool color[mx];
i64 bfs(int s, int t){
	int ok,u,v,sz,i;
	i64 path_cap;
	memset(pre,-1,sizeof(pre));
	memset(color,0,sizeof(color));
	queue < int > q;
	
	color[s] = 1;
	q.push(s);
	ok = 1;
	while(!q.empty() && ok){
		u = q.front();
		q.pop();
		sz = M[u].size();
		for(i=0;i<sz;i++){
			v = M[u][i];
			if(!color[v] && cap[u][v] > 0){
				q.push(v);
				color[v] = 1;
				pre[v] = u;
				if(v==t){ok = 0;break;}
			}
		}
	}
	path_cap = inf;
	u = t;
	while(pre[u]!=-1){
		v = pre[u];
		path_cap = _min(path_cap, cap[v][u]);
		u = v;
	}
	u = t;
	while(pre[u]!=-1){
		v = pre[u];
		cap[v][u] -= path_cap;
		cap[u][v] += path_cap;
		u = v;
	}
	if(path_cap==inf)return 0;
	return path_cap;
}

i64 max_flow(int s, int t){
	i64 r,pcap;
	r = 0;
	while(true){
		pcap = bfs(s,t);
		if(!pcap)break;
		r += pcap;
	}
	return r;
}

void dfs(int u){
	int sz,i,v;
	color[u] = 1;
	sz = M[u].size();
	for(i=0;i<sz;i++){
		v = M[u][i];
		if(!color[v] && cap[u][v] && CAP[u][v])dfs(v);
	}
}

void printMinCut(int s, int t, int n){
	int u,sz,v,i;
	u = max_flow(s,t);
	memset(color,0,sizeof(color));
	dfs(s);
	for(u=1;u<=n;u++)if(color[u]){
		sz = M[u].size();
		for(i=0;i<sz;i++){
			v = M[u][i];
			if(!color[v] && !cap[u][v] && CAP[u][v])printf("%d %d\n",u,v);
		}
	}
}

Convex Hull (Grahm Scan)


 
point fp;
bool cmp(const point &a,const point &b){
	i64 d = isLeft(fp,a,b);
	if(d<0)return false;
	if(feq(d,(i64)0) && (dist(fp,a) > dist(fp,b)) )return false;
	return true;
}
void ConvexHull(point p[], point c[], int &np, int &nc){
	int i,j,pos = 0,k;
	i64 dd;
	bool flg=0;
	for(i=1;i<np;i++){
		if( (p[i].x < p[pos].x) || ( feq(p[i].x,p[pos].x) && p[i].y < p[pos].y) )pos = i;
		dd = isLeft(p[0],p[i],p[(i+1)%np]);
		if(!flg && !feq(dd,(i64)0))flg=1;
	}
	swap(p[pos],p[0]);
	fp = p[0];
	sort(p+1,p+np,cmp);
	c[0] = p[0];
	c[1] = p[1];
	c[2] = p[2];
	for(i = j = 3; i < np; i++){
		while(isLeft(c[j-2],c[j-1],p[i]) < 0)j--;
		c[j++] = p[i];
	}
	i--;
	for(k=i-1;k>=0 && flg;k--){
		dd = isLeft(c[0],p[k],p[i]);
		if(!feq(dd,(i64)0))break;
		c[j++] = p[k];
	}
	if(np>2)nc = j;
	else nc = np;
}
inline i64 PolygonArea(point p[],int np){
	i64 area = 0;
	for(int i = 0;i < np; i++){
		area += ( (p[i].x*p[(i+1)%np].y) - (p[i].y*p[(i+1)%np].x) );
	}
	return area;
}

Miscellaneous Geometry


 
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <vector>
#include <map>
#include <algorithm>
using namespace std;

#define mx 100
#define pii pair < int, int >
#define i64 long long
#define eps 1e-9
#define _min(i,j) ((i)>(j+eps)?(j):(i))
#define _max(i,j) ((i)>(j+eps)?(i):(j))

struct point{
	i64 x,y;
	point(){}
	point(i64 xx, i64 yy){x = xx;y = yy;}
};

struct line { // Creates a line with equation ax + by + c = 0
	i64 a, b, c;
	line() {}
	line( point p1,point p2 ) {
		a=p1.y-p2.y;
		b=p2.x-p1.x;
		c=p1.x*p2.y-p2.x*p1.y;
	}
};

struct segment{
	point st,end;
	segment(){}
	segment(point a,point b){st = a;end = b;}
};

struct rect{
	point ul,lr;
	rect(){}
	rect(point a, point b){ul = a;lr = b;}
};

struct tr{
	point p[3];
	tr(){}
	tr(point a, point b, point c){p[0] = a; p[1] = b; p[2] = c;}
};

struct circle{
	i64 r;
	point center;
	circle(){}
	circle(point b,i64 a){r = a; center = b;}
};

struct polygon {
	int n;
	point P[mx];
};

inline bool feq(i64 a, i64 b){
	return (fabs(a-b)<eps);
}
inline i64 dist(point a, point b){
	return ( (a.x-b.x) * (a.x-b.x) + (a.y-b.y) * (a.y-b.y) );
}
inline i64 isLeft(point a, point b, point c){
	return ( (a.x*b.y) + (b.x*c.y) + (c.x*a.y) - (a.y*b.x) - (b.y*c.x) - (c.y*a.x) );
}
inline bool onSegment(point a,point b,point c){
	if( (_min(a.x,b.x) < c.x || feq(_min(a.x,b.x),c.x)) && (c.x < _max(a.x,b.x) || feq(c.x,_max(a.x,b.x))) )
		if( (_min(a.y,b.y) < c.y || feq(_min(a.y,b.y),c.y) ) && (c.y < _max(a.y,b.y) || feq(c.y,_max(a.y,b.y))) )return true;
	return false;
}
inline bool isSegIntersect(point p1,point p2,point p3,point p4){
	i64 d1,d2,d3,d4;
	d1 = isLeft(p1,p2,p3);
	d2 = isLeft(p1,p2,p4);
	d3 = isLeft(p3,p4,p1);
	d4 = isLeft(p3,p4,p2);
	if( (d1*d2)<0 && (d3*d4)<0 )return true;
	else if(feq(d1,(i64)0) && onSegment(p1,p2,p3))return true;
	else if(feq(d2,(i64)0) && onSegment(p1,p2,p4))return true;
	else if(feq(d3,(i64)0) && onSegment(p3,p4,p1))return true;
	else if(feq(d4,(i64)0) && onSegment(p3,p4,p2))return true;
	return false;
}

inline bool intersection( line L1, line L2, point &p ) {// If two line intersect each other
	i64 det = L1.a * L2.b - L1.b * L2.a;
	if( feq(det,(i64)0) ) return false;
	p.x = ( L1.b * L2.c - L2.b * L1.c ) / det;
	p.y = ( L1.c * L2.a - L2.c * L1.a ) / det;
	return true;
}

inline bool inRect(rect r, point p){// If a point inside a rectangle
	if( (p.x > r.ul.x && p.x < r.lr.x) && (p.y < r.ul.y && p.y > r.lr.y) ) return true;
	return false;
}

inline bool inTr(tr t, point p){// If a point inside a triangle
	i64 d,d1,d2,d3;
	d = fabs( isLeft(t.p[0],t.p[1],t.p[2]) );
	d1 = fabs( isLeft(t.p[0],t.p[1],p) );
	if( feq(d1,(i64)0) && onSegment(t.p[0],t.p[1],p) )return false;
	d2 = fabs( isLeft(t.p[1],t.p[2],p) );
	if( feq(d2,(i64)0) && onSegment(t.p[1],t.p[2],p) )return false;
	d3 = fabs( isLeft(t.p[2],t.p[0],p) );
	if( feq(d3(i64)0) && onSegment(t.p[2],t.p[0],p) )return false;
	return feq(d,d1+d2+d3);
}

inline bool inCircle(circle c,point p){// If a point inside a circle
	if( dist(c.center,p)+eps < c.r ) return true;
	return false;
}

Bipartite Matching (Basic)


 
#define mx 210
vector < int > g[mx];
int lf[mx],rt[mx],n;
bool vis[mx];

bool dfs(int p) {
 int i,j=g[p].size();
 for(i=0;i<j;i++) if(!vis[g[p][i]]) {
  vis[g[p][i]]=1;
  if(rt[g[p][i]]==-1 || dfs(rt[g[p][i]])) {
   rt[g[p][i]]=p;
   lf[p]=g[p][i];
   return true;
  }
 }
 return false;
}

int bpm() {
 int i,q=0;
 memset(lf,-1,sizeof lf);
 memset(rt,-1,sizeof rt);
 
 for(i=0;i<n;i++) {
  memset(vis,0,sizeof vis);
  if(dfs(i))q++;
 }
 return q;
}

Bellman Ford


 
vector < pii > M[mx];
int d[mx];
bool bellman_ford(int s,int n){
	int i,u,j,sz,v,w;
	bool done = false;
	for(i=0;i<n;i++)d[i] = inf;
	d[s] = 0;
	for(i=0;i<n && !done;i++){
		done = true;
		for(u=0;u<n;u++){
			sz = M[u].size();
			for(j=0;j<sz;j++){
				v = M[u][j].first;
				w = M[u][j].second;
				if(d[v] > (d[u] + w)){
					d[v] = d[u] + w;
					done = false;
				}
			}
		}
	}
	return done;
}

Bridge Network


 
#define mx 110
#define _min(i,j) ((i)>(j)?(j):(i))

int d[mx],low[mx],t;
bool color[mx],artp[mx];
vector < int > M[mx];
vector < pii > bridge;
void dfs(int par, int u){
	int sz,i,v;
	low[u] = d[u] = ++t;
	color[u] = 1;
	sz = M[u].size();
	for(i=0;i<sz;i++){
		v = M[u][i];
		if(v==par)continue;
		if(!color[v]){
			dfs(u,v);
			low[u] = _min(low[u],low[v]);
			if(low[v] > d[u])
				bridge.push_back(pii(u,v));
		}
		else low[u] = _min(low[u],d[v]);
	}
}

Articulation Point


 
#define mx 110
#define _min(i,j) ((i)>(j)?(j):(i))

int d[mx],low[mx],t;
bool color[mx],artp[mx];
vector < int > M[mx];

void dfs(int par, int u){
	int sz,i,v,child = 0;
	low[u] = d[u] = ++t;
	color[u] = 1;
	sz = M[u].size();
	for(i=0;i<sz;i++){
		v = M[u][i];
		if(v==par)continue;
		if(!color[v]){
			child++;
			dfs(u,v);
			low[u] = _min(low[u],low[v]);
			if(low[v] >= d[u] && par!=-1)artp[u] = 1;
		}
		else low[u] = _min(low[u],d[v]);
	}
	if(par == -1 && child > 1 && !artp[u])artp[u] = 1;
}

Single Source Shortest Path (Dijkstra)


 
struct comp {
    bool operator() (const pii &a, const pii &b) {
        return a.second > b.second;
    }
};
int color[mx], d[mx], nodes;
vector < pii > path[MX];
int dijkstra(int source, int dest){
	int u,v,sz,y,z;
	priority_queue< pii, vector< pii >,comp > q;
	for(v = 1; v<=nodes; v++){
		color[v] = 0;
		d[v] = inf;
	}
	d[source] = 0;
	q.push(pii(source, 0));
	while(!q.empty()){
		u = q.top().first;
		if(u==dest)break;
		q.pop();
		if(color[u])continue;
		sz = path[u].size();
		for(v=0;v<sz;v++){
			y = path[u][v].first;
			z = path[u][v].second;
			if(!color[y] && d[u]+z < d[y]){
				d[y] = d[u]+z;
				q.push(pii(y,d[y]));
			}
		}
		color[u] = 1;
	}
	return d[dest];
}

Number of Divisor


 
i64 noOfDivisor(i64 n){
	int j,f;
	i64 cnt,ans=1;
	f = 0;
	for(j=0;prime[j]<=n && j<prlen;j++){
		cnt = 0;
		if(n%prime[j]==0){
			while(n%prime[j]==0){
				cnt++;
				n /= prime[j];
			}
			f=1;
			ans *= (cnt+1);
		}
	}
	//if(!f || n!=1)cnt++;
	if(n^1)ans <<= 1;
	return ans;
}

Template


 
//Bismillahir Rahmanir Rahim
//#pragma warning(disable:4786)
//#pragma comment(linker,"/STACK:514850816")
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <cctype>
#include <cstring>
#include <climits>
#include <string>
#include <sstream>
#include <queue>
#include <stack>
#include <vector>
#include <set>
#include <map>
#include <list>
#include <algorithm>
using namespace std;

#define mx 100000
#define pii pair < int, int >
#define i64 __int64
#define inf 2147483647
#define eps 1e-11
#define pi 2*acos(0.0)

int gcd( int a, int b ) { return !b ? a : gcd ( b, a&b );}
struct Euclid{
	int x,y,d;
	Euclid(){}
	Euclid( int xx, int yy, int dd ) { x = xx, y = yy, d = dd; }
};
Euclid egcd( int a, int b){
	if(!b)return Euclid(1,0,a);
	Euclid r = egcd(b,a%b);
	return Euclid( r.y, r.x - a / b * r.y, r.d);
}

Prime Factorization


 
void PrimeFact( int n, int *factors, int *factCount, int &len){
	int i,count, sqrtN;
	sqrtN = (int) sqrt( (double) n ) + 1;
	for(i = 0; prime[i] < sqrtN ; i++)if(!(n%prime[i])){
		factors[len] = prime[i]; count = 0;
		while(!(n%prime[i]))n/=prime[i], count++;
		factCount[len++] = count;
		sqrtN = (int) sqrt( (double) n ) + 1;
	}
	if(n>1)factors[len] = n, factCount[len++] = 1;
}

Generating Prime (Sieve)


 
#define mx 100000
#define chkp(n) (prm[n>>6]&(1<<((n>>1)&31)))
#define genp(n) (prm[n>>6]|=(1<<((n>>1)&31)))
#define PrimeLimit 10000000
int prm[PrimeLimit / 64], prime[mx], prlen;
void GeneratePrime(){
	int i,j,sqrtN;
	prlen = 0;
	prime[prlen++]=2;
	sqrtN = ( int ) sqrt ( ( double ) PrimeLimit ) + 1;
	for(i=3;i<sqrtN;i+=2)if(!chkp(i)){
			prime[prlen++] = i;
			for(j=(i*i);j<PrimeLimit;j+=(i<<1))genp(j);
	}
	for(;i<PrimeLimit;i+=2)if(!chkp(i))prime[prlen++]=i;
}

Bignumber Subtraction


 
void Subtraction(char *f, char *s, char *ans){
	int lenf,lens,a,carry,ind,b;
	lenf = strlen(f)-1; lens = strlen(s)-1;
	carry = ind = 0;
	while(lens >=0 || lenf >=0){
		b = ((lens >=0)?(s[lens--]-'0'):0) + carry; 
		if(f[lenf] >=(b+'0')){a = f[lenf--]-'0';carry = 0;}
		else{a = f[lenf--]-'0' + 10;carry = 1;}
		ans[ind++] = (a - b) + '0';
	}
	for(ind--;ind >=0;ind--)if(ans[ind]!='0')break;
	ans[++ind] = 0;
	reverse(ans,ans+ind);
}

Bignumber Multiplication


 
void Multiplication(char *f, char *s, char *sum){
	int lenf,lens,i,j,k,carry,a;
	memset(sum,0,sizeof(sum));
	lenf = strlen(f);lens = strlen(s);
	reverse(f,f+lenf);reverse(s,s+lens);
	for(i=0;i < lens;i++){
		carry = 0;k = i;
		for(j=0;j < lenf;j++){
			a = ( (f[j]-'0') * (s[i]-'0') ) + carry;
			if(i) a += (sum[k]-'0');
			sum[k++] = (a%10) + '0';
			carry = a/10;
		}
		if(carry)sum[k++] = carry + '0';
		sum[k++] = '0';
	}
	for(k--;k >=0;k--)if(sum[k]!='0')break;
	sum[++k] = 0;
	reverse(sum,sum+k);
}

Bignumber Addition


 
void Addition(char *f, char *s, char *ans){
	int lenf,lens,a,carry,ind;
	lenf = strlen(f)-1; lens = strlen(s)-1;
	carry = ind = 0;
	while(lens > =0 || lenf > =0){
		a = ((lens > =0) ? (s[lens--]-'0') : 0) + ((lenf > =0) ? (f[lenf--]-'0') : 0) + carry;
		ans[ind++] = (a%10) + '0';
		carry = a/10;
	}
	if(carry)ans[ind++] = carry + '0';
	ans[ind] = 0;
	reverse(ans,ans+ind);
}