<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.universitas.ro/index.php?action=history&amp;feed=atom&amp;title=3379_-_nkgraf</id>
	<title>3379 - nkgraf - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.universitas.ro/index.php?action=history&amp;feed=atom&amp;title=3379_-_nkgraf"/>
	<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3379_-_nkgraf&amp;action=history"/>
	<updated>2026-05-01T07:50:08Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.42.1</generator>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3379_-_nkgraf&amp;diff=10064&amp;oldid=prev</id>
		<title>Benzar Ioan: Pagină nouă: == Cerința == Fie N, K, P trei numere naturale nenule. Vom considera toate grafurile orientate care au N vârfuri şi K arce, reprezentate prin lista arcelor lor ordonate lexicografic. Vom ordona apoi grafurile lexicografic şi le vom numerota începând cu 1. Scrieţi un program care, cunoscând N, K şi P, rezolvă următoarele două cerinţe: 1. determină NR, numărul de grafuri orientate cu N vârfuri şi K arce; 2. determină graful orientat cu N vârfuri şi K arce av...</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3379_-_nkgraf&amp;diff=10064&amp;oldid=prev"/>
		<updated>2024-06-03T19:24:28Z</updated>

		<summary type="html">&lt;p&gt;Pagină nouă: == Cerința == Fie N, K, P trei numere naturale nenule. Vom considera toate grafurile orientate care au N vârfuri şi K arce, reprezentate prin lista arcelor lor ordonate lexicografic. Vom ordona apoi grafurile lexicografic şi le vom numerota începând cu 1. Scrieţi un program care, cunoscând N, K şi P, rezolvă următoarele două cerinţe: 1. determină NR, numărul de grafuri orientate cu N vârfuri şi K arce; 2. determină graful orientat cu N vârfuri şi K arce av...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== Cerința ==&lt;br /&gt;
Fie N, K, P trei numere naturale nenule. Vom considera toate grafurile orientate care au N vârfuri şi K arce, reprezentate prin lista arcelor lor ordonate lexicografic.&lt;br /&gt;
Vom ordona apoi grafurile lexicografic şi le vom numerota începând cu 1.&lt;br /&gt;
Scrieţi un program care, cunoscând N, K şi P, rezolvă următoarele două cerinţe:&lt;br /&gt;
1. determină NR, numărul de grafuri orientate cu N vârfuri şi K arce;&lt;br /&gt;
2. determină graful orientat cu N vârfuri şi K arce având numărul de ordine P.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare nkgraf.in conţine pe prima linie cerinţa care trebuie să fie rezolvată (1 sau 2). Pe a doua linie se află trei numere naturale separate prin câte-un spaţiu N K P, având semnificaţia din enunţ.&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Dacă cerinţa este 1, fişierul de ieşire nkgraf.out va conţine o singură linie pe care va fi scris NR, numărul de grafuri orientate cu N vârfuri şi K arce.&lt;br /&gt;
Dacă cerinţa este 2, fişierul de ieşire nkgraf.out va conţine K linii pe care vor fi scrise în ordine lexicografică cele K arce ale grafului având numărul de ordine P, câte un arc pe o linie; pentru fiecare arc vor fi scrise două vârfuri separate printr-un spaţiu, reprezentând extremitatea iniţială şi respectiv extremitatea finală a arcului.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
*2 ≤ N ≤ 30&lt;br /&gt;
*1 ≤ P ≤ min {NR,1.000.000}&lt;br /&gt;
*Orice arc din graf a avea extremitatea iniţială diferită de extremitatea finală.&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
;Intrare&lt;br /&gt;
1&amp;lt;br&amp;gt;&lt;br /&gt;
3 2 6&lt;br /&gt;
;Iesire&lt;br /&gt;
15&lt;br /&gt;
== Exemplu 2 ==&lt;br /&gt;
;Intrare&lt;br /&gt;
2&amp;lt;br&amp;gt;&lt;br /&gt;
3 2 6&lt;br /&gt;
;Iesire&lt;br /&gt;
1 3&amp;lt;br&amp;gt;&lt;br /&gt;
2 1&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
from itertools import permutations, combinations&lt;br /&gt;
&lt;br /&gt;
def read_input():&lt;br /&gt;
    with open(&amp;quot;nkgraf.in&amp;quot;, &amp;quot;r&amp;quot;) as file:&lt;br /&gt;
        cerinta = int(file.readline().strip())&lt;br /&gt;
        N, K, P = map(int, file.readline().strip().split())&lt;br /&gt;
    return cerinta, N, K, P&lt;br /&gt;
&lt;br /&gt;
def write_output(output):&lt;br /&gt;
    with open(&amp;quot;nkgraf.out&amp;quot;, &amp;quot;w&amp;quot;) as file:&lt;br /&gt;
        if isinstance(output, int):&lt;br /&gt;
            file.write(str(output) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
        else:&lt;br /&gt;
            for edge in output:&lt;br /&gt;
                file.write(&amp;quot; &amp;quot;.join(map(str, edge)) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
def generate_graphs(N, K):&lt;br /&gt;
    nodes = range(1, N + 1)&lt;br /&gt;
    possible_edges = list(permutations(nodes, 2))&lt;br /&gt;
    all_graphs = list(combinations(possible_edges, K))&lt;br /&gt;
    return sorted(all_graphs)&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    cerinta, N, K, P = read_input()&lt;br /&gt;
&lt;br /&gt;
    # Validări&lt;br /&gt;
    if not (2 &amp;lt;= N &amp;lt;= 30):&lt;br /&gt;
        raise ValueError(&amp;quot;N trebuie să fie între 2 și 30&amp;quot;)&lt;br /&gt;
    if not (1 &amp;lt;= P &amp;lt;= min(len(generate_graphs(N, K)), 1000000)):&lt;br /&gt;
        raise ValueError(&amp;quot;P trebuie să fie între 1 și min(NR, 1.000.000)&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    all_graphs = generate_graphs(N, K)&lt;br /&gt;
    NR = len(all_graphs)&lt;br /&gt;
&lt;br /&gt;
    if cerinta == 1:&lt;br /&gt;
        write_output(NR)&lt;br /&gt;
    elif cerinta == 2:&lt;br /&gt;
        graph = all_graphs[P - 1]&lt;br /&gt;
        write_output(graph)&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Benzar Ioan</name></author>
	</entry>
</feed>