Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <string.h>
- #include <limits.h>
- long long INF = LONG_LONG_MAX;
- int n, m, nS, nD, visited[10], taken[10], k[6][16], k_num;
- long long wS, wD, weights[10], answer;
- long long min(long long a, long long b) {
- return ((a < b) ? a : b);
- }
- void recursive(int x, int nS, int nD) {
- if(x == m) {
- long long result = 0;
- for(int i = 0; i < n; ++i) {
- memset(taken, 0, sizeof(taken));
- for(int j = 1; j <= k[i][0]; ++j) {
- if(!taken[visited[k[i][j]]]) {
- result += weights[visited[k[i][j]]];
- taken[visited[k[i][j]]] = 1;
- }
- }
- }
- answer = min(answer, result);
- return;
- }
- if(visited[x]) {
- recursive(x + 1, nS, nD);
- } else {
- if(nS) {
- ++k_num;
- weights[k_num] = wS;
- visited[x] = k_num;
- recursive(x + 1, nS - 1, nD);
- visited[x] = 0;
- --k_num;
- }
- if(nD) {
- for(int i = x + 1; i < m; ++i) {
- if(!visited[i]) {
- ++k_num;
- weights[k_num] = wD;
- visited[x] = visited[i] = k_num;
- recursive(x + 1, nS, nD - 1);
- --k_num;
- visited[i] = visited[x] = 0;
- }
- }
- }
- }
- }
- #include <stdio.h>
- #include <string.h>
- #define MAX_LENGTH 6
- #define MAX_NUMBER 999999
- typedef struct Relation {
- int Left, Right;
- char Sign[3];
- } Relation;
- void ConvertNumberToSTR(int Number, char* Result) {
- if(Number > ((int)MAX_NUMBER / 10)) {
- sprintf(Result, "%i\0", Number);
- return;
- }
- char str[MAX_LENGTH];
- sprintf(str, "%i\0", Number);
- int index = 0;
- for(int i = 0; i < MAX_LENGTH - strlen(str); ++i) {
- Result[index] = '0';
- ++index;
- }
- for(int i = 0; i < strlen(str); ++i) {
- Result[index] = str[i];
- ++index;
- }
- Result[index] = '\0';
- }
- int main() {
- FILE* input = fopen("input.txt", "r");
- char Line[4];
- int ArraySize = 0;
- Relation Array[30];
- while(fscanf(input, "%s", Line) != EOF) {
- Array[ArraySize].Left = Line[0] - '1';
- if(strlen(Line) == 3) {
- Array[ArraySize].Right = Line[2] - '1';
- Array[ArraySize].Sign[0] = Line[1];
- Array[ArraySize].Sign[1] = '\0';
- } else {
- Array[ArraySize].Right = Line[3] - '1';
- Array[ArraySize].Sign[0]= Line[1];
- Array[ArraySize].Sign[1]= Line[2];
- Array[ArraySize].Sign[2]= '\0';
- }
- ++ArraySize;
- }
- fclose(input);
- char STRNumber[6];
- int IsProper;
- int Result = 0;
- for(int i = 0; i <= MAX_NUMBER; ++i) {
- ConvertNumberToSTR(i, STRNumber);
- IsProper = 1;
- for(int j = 0; j <= ArraySize; ++j) {
- if(Array[j].Sign[0] == '>' && Array[j].Sign[1] == '=') {
- IsProper = (STRNumber[Array[j].Left] >= STRNumber[Array[j].Right] ? 1 : 0);
- } else if(Array[j].Sign[0] == '<' && Array[j].Sign[1] == '=') {
- IsProper = (STRNumber[Array[j].Left] <= STRNumber[Array[j].Right] ? 1 : 0);
- } else if(Array[j].Sign[0] == '<' && Array[j].Sign[1] == '>') {
- IsProper = (STRNumber[Array[j].Left] != STRNumber[Array[j].Right] ? 1 : 0);
- } else if(Array[j].Sign[0] == '>') {
- IsProper = (STRNumber[Array[j].Left] > STRNumber[Array[j].Right] ? 1 : 0);
- } else if(Array[j].Sign[0] == '<') {
- IsProper = (STRNumber[Array[j].Left] < STRNumber[Array[j].Right] ? 1 : 0);
- } else if(Array[j].Sign[0] == '=') {
- IsProper = (STRNumber[Array[j].Left] == STRNumber[Array[j].Right] ? 1 : 0);
- }
- if(IsProper == 0) {
- break;
- }
- }
- if(IsProper == 1) {
- ++Result;
- }
- }
- FILE* output = fopen("output.txt", "w");
- fprintf(output, "%i\0", Result);
- fclose(output);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement