1.1 How to use USACO
2016-02-14 11:08
253 查看
文件流
c
c
限制
题型
1_1_2 ride 字符串处理
1_1_5分糖
1_1_6黑色星期五
1_1_7 deads
5/23更新:
在这个网站找到正确使用xcode方法
采用的排名第二的step by step 方法
Use the Product Menu(软件打开上面那一条)
Select the Scheme option(下面就直接找就行了…)
Select the Edit Scheme option
Click the Options Tab
Tick the “Working Directory” item
Click the small icon at the right end of the text box.
Select the directory
实际xcode路径
实际Xcode路径:
另一种方法
One second runtime limit unless other specified (700 MHz Pentium III)
About 16MB datasize limit
About 1MB stacksize limit
In C/C++, ints are 32 bits (char is 8; short is 16; long is 32; long long is 64)
Be sure your program exits with status 0
Be sure you print complete lines (with terminating newline), - - not just a few words or numbers
Don’t use files other than the specified input, output, and auxiliary files
Other common sense rules that need not be listed
Knapsack背包
Greedy
search
Complete Search
Flood Fill
Shortest Path
Recursive Search Techniques
Heuristic Search启发式
Approximate Search
Minimum Spanning Tree
Computational Geometry
Network Flow
Eulerian Path
Two-Dimensional Convex Hull
BigNums
Ad Hoc Problems 临时问题
map水过..BUT
gift写成gist RE两次
Brute force
题解都复制了一遍:)
题解二算一边= =
题解二:
c
c
限制
题型
1_1_2 ride 字符串处理
1_1_5分糖
1_1_6黑色星期五
1_1_7 deads
5/23更新:
在这个网站找到正确使用xcode方法
采用的排名第二的step by step 方法
Use the Product Menu(软件打开上面那一条)
Select the Scheme option(下面就直接找就行了…)
Select the Edit Scheme option
Click the Options Tab
Tick the “Working Directory” item
Click the small icon at the right end of the text box.
Select the directory
文件流
c
/* ID: leidar11 LANG: C TASK: test */ #include <stdio.h> main () { FILE *fin = fopen ("test.in", "r"); FILE *fout = fopen ("test.out", "w"); int a, b; fscanf (fin, "%d %d", &a, &b); /* the two input integers */ fprintf (fout, "%d\n", a+b); exit (0); }
实际xcode路径
FILE *fin = fopen("/Users/macbook/Desktop/in.txt", "r"); FILE *fout = fopen("/Users/macbook/Desktop/out.txt", "w");
c + +
Below is a simple solution in the C++ programming language. Note the use of 'return (0);', which is usually required to exit properly. /* ID: leidar11 PROG: test LANG: C++ */ #include <iostream> #include <fstream> #include <string> using namespace std; int main() { ofstream fout ("test.out"); ifstream fin ("test.in"); int a, b; fin >> a >> b; fout << a+b << endl; return 0; }
实际Xcode路径:
ofstream fout ("/Users/macbook/Desktop/out.txt"); ifstream fin ("/Users/macbook/Desktop/in.txt");
另一种方法
string inputFilename = "beads.in", outputFilename = "beads.out"; input.open(inputFilename.c_str(), ios::in); output.open(outputFilename.c_str(), ios::out);
限制
The restrictions are few:One second runtime limit unless other specified (700 MHz Pentium III)
About 16MB datasize limit
About 1MB stacksize limit
In C/C++, ints are 32 bits (char is 8; short is 16; long is 32; long long is 64)
Be sure your program exits with status 0
Be sure you print complete lines (with terminating newline), - - not just a few words or numbers
Don’t use files other than the specified input, output, and auxiliary files
Other common sense rules that need not be listed
题型
Dynamic ProgrammingKnapsack背包
Greedy
search
Complete Search
Flood Fill
Shortest Path
Recursive Search Techniques
Heuristic Search启发式
Approximate Search
Minimum Spanning Tree
Computational Geometry
Network Flow
Eulerian Path
Two-Dimensional Convex Hull
BigNums
Ad Hoc Problems 临时问题
1_1_2 ride 字符串处理
analysis_hashint hash(char *s) { int i, h; h = 1; for(i=0; s[i] && isalpha(s[i]); i++) h = ((s[i]-'A'+1)*h) % 47; return h; }
1_1_5分糖
字符串处理比较#include <string.h> #include <assert.h> void addperson(char *name){ assert(npeople < MAXPEOPLE); strcpy(people[npeople].name, name); npeople++; } Person* lookup(char *name){ int i; /* look for name in people table */ for(i=0; i<npeople; i++) if(strcmp(name, people[i].name) == 0) return &people[i]; assert(0); /* should have found name */ }
map水过..BUT
gift写成gist RE两次
1_1_6黑色星期五
判断闰年 暴力枚举Brute force
int isleap(int y){ return y%4==0 && (y%100 != 0 || y%400 == 0); } int mtab[] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; /* return length of month m in year y */ int mlen(int y, int m){ if(m == 1) /* february */ return mtab[m]+isleap(y); else return mtab[m]; }
1_1_7 deads
神烦循环字符串…题解都复制了一遍:)
题解二算一边= =
Daniel Bundala had an O(n) solution: Dynamic Programming is good method for solving this problem in O(N). If we consider two copies of the string we easy transform cyclic configuration of the necklace to linear. Now we can compute for each breaking point how many beads of the same color can be collected on the left and on the right from the breaking point. I show how we can compute it only for the left side. For right side it is analogical. Let r[p] and b[p] be the number of red / blue beads that can be collected, when necklace is broken in point p. If we know this and color of next bead (c) we can compute r[p+1] and b[p+1]. r[0] = p[0] = 0 If c = 'r' then r[p+1] = r[p] + 1 and b[p+1] = 0 because the length of the blue beads is 0. if c = 'b' then b[p+1] = b[p] + 1 and r[p+1] = 0 if c = 'w' then both length of the red and length of blue beads can be longer. so r[p+1] = r[p]+1 and b[p+1] = b[p] + 1. The number of beads that can be collected in breaking point p is then max(left[r[p]], left[b[p]]) + max(right[r[p]], right[b[p]]). And the maximum from this value is answer for the problem. #include <stdio.h> #include <string.h> #include <algorithm> using namespace std; FILE *in,*out; int main () { in = fopen("beads.in", "r"); out = fopen ("beads.out", "w"); int n; char tmp[400], s[800]; fscanf(in, "%d %s", &n, tmp); strcpy(s, tmp); strcat(s, tmp); int left[800][2], right[800][2]; left[0][0] = left[0][1] = 0; for (int i=1; i<= 2 * n; i++){ if (s[i - 1] == 'r'){ left[i][0] = left[i - 1][0] + 1; left[i][1] = 0; } else if (s[i - 1] == 'b'){ left[i][1] = left[i - 1][1] + 1; left[i][0] = 0; } else { left[i][0] = left[i - 1][0] + 1; left[i][1] = left[i - 1][1] + 1; } } right[2 * n][0] = right[2 * n][1] = 0; for (int i=2 * n - 1; i >= 0; i--){ if (s[i] == 'r'){ right[i][0] = right[i + 1][0] + 1; right[i][1] = 0; } else if (s[i] == 'b'){ right[i][1] = right[i + 1][1] + 1; right[i][0] = 0; } else { right[i][0] = right[i + 1][0] + 1; right[i][1] = right[i + 1][1] + 1; } } int m = 0; for (int i=0; i<2 * n; i++) m = max(m, max(left[i][0], left[i][1]) + max(right[i][0], right[i][1])); m = min(m, n); fprintf(out, "%d\n", m); fclose(in); fclose(out); return 0; }
题解二:
for(i=0; i<n; i++) { c = (char) s[i]; if(c == 'w') state = 0; else state = 1; j = i; current = 0; while(state <= 2) { // dont go further in second string than starting position in first string while(j<n+i && (s[j] == c || s[j] == 'w')) { current++; j++; } state++; c = s[j]; } // while if(current > max) max = current; } // for
相关文章推荐
- Log4j输出格式控制--log4j的PatternLayout参数含义
- Android权限
- 有木有这样一张酷图帮你集齐所有git命令超实用
- HDU 1281 棋盘游戏(二分图最大匹配:关键边)
- Wear:onConnectionFailed: ConnectionResult{statusCode=SERVICE_MISSING, resolution=null, message=null}
- 沉默寡言的程序猿们,大喊出你的心声吧!
- spring框架之ioC
- Moxile的用法
- C#设计模式03-原型模式
- NYOJ之九的余数(大数问题)
- 8VC Venture Cup 2016 - Elimination Round A. Robot Sequence 暴力
- IOS中使用 CocoaAsyncSocket
- Adafruit的樹莓派教程第五課:使用控制電纜
- Educational Codeforces Round 7
- 仿新浪微博客户端--界面设计(1)
- IOS杂记
- 自定义NSLog
- HTML5のFile&FileSystem
- 你刚才在淘宝上买了一件东西【技术普及贴】
- 8VC Venture Cup 2016 - Elimination RoundC. Block Towers