USACO Chapter1-Getting started Section 1.2
2013-11-06 22:54
393 查看
第二节没有什么难想的题,关于进制转换这块我不是很熟练(其实X进制跟10进制都一样),得补习一下。
Milking Cows (milk2)
区间问题,看数据用int似乎也应该能过。注意一点区间左右都是闭的,也就是说a在t时刻结束,b在t时刻开始,那么a和b属于连续的情况。
Transformations (transform)
注意一点,1,2,3……这几种操作分别是有优先级的。
例如
2
@@
@@
@@
@@
这种情况应该输出1,而不是6.
Name That Number (namenum)
将字典中的每个名字转换成数字串。然后寻找与给定数字串相同的输出名字即可。
这里注意题目要输入长度至多12的数字,这意味着int是不够的,long long 应该可以,不过我还是使用了string。
Palindromic Squares (palsquare)
进制转换问题。思路很简单,先将从十进制1开始循环,平方之后转换成B进制,看是否是回文,如果是则将原数转换成B进制并输出还有回文。
Dual Palindromes (dualpal)
过了上个题这个就容易多了。枚举一下就行了。
Milking Cows (milk2)
区间问题,看数据用int似乎也应该能过。注意一点区间左右都是闭的,也就是说a在t时刻结束,b在t时刻开始,那么a和b属于连续的情况。
/* ID:kkkwjx1 LANG:C++ TASK:milk2 */ #include <iostream> #include <cstdio> #include <cstring> #include <cmath> #include <algorithm> #define Max(a,b) (a>b)?a:b using namespace std; struct Elem { int l,r; }; bool cmp(Elem a,Elem b) { if(a.l==b.l) return a.r<b.r; return a.l<b.l; } Elem p[5005]; int main() { freopen("milk2.in","r",stdin); freopen("milk2.out","w",stdout); int n; scanf("%d",&n); for(int i=0; i<n; ++i) scanf("%d%d",&p[i].l,&p[i].r); sort(p,p+n,cmp); int st=p[0].l,ed=p[0].r; long long ans1=ed-st,ans2=0; for(int i=1; i<n; ++i) { if(ed<p[i].l) { ans2=Max(ans2,p[i].l-ed); st=p[i].l; ed=p[i].r; } else { if(ed<=p[i].r) ed=p[i].r; } ans1=Max(ans1,ed-st); } printf("%lld %lld\n",ans1,ans2); return 0; }
Transformations (transform)
注意一点,1,2,3……这几种操作分别是有优先级的。
例如
2
@@
@@
@@
@@
这种情况应该输出1,而不是6.
/* ID:kkkwjx1 LANG:C++ TASK:transform */ #include <iostream> #include <cstdio> #include <cstring> #include <string> #define INF 0x7f7f7f7f using namespace std; int N; char str[12][12],str0[12][12]; char str1[12][12],str2[12][12],str3[12][12],str4[12][12]; bool ok=false; bool Check(char s[12][12],char ss[12][12]) { for(int i=0; i<N; ++i) if(strcmp(s[i],ss[i])) return false; return ok=true; } void Change90(char s[12][12],char t[12][12]) { for(int i=0; i<N; ++i) for(int j=0; j<N; ++j) t[j][N-1-i]=s[i][j]; } void Reverse(char s[12][12],char t[12][12]) { for(int i=0; i<N; ++i) for(int j=0; j<N; ++j) t[i][j]=s[i][N-1-j]; } int main() { freopen("transform.in","r",stdin); freopen("transform.out","w",stdout); scanf("%d",&N); for(int i=0; i<N; ++i) scanf("%s",str[i]); for(int i=0; i<N; ++i) scanf("%s",str0[i]); Change90(str,str1); if(Check(str1,str0)) putchar('1'); else { Change90(str1,str2); if(Check(str2,str0)) putchar('2'); else { Change90(str2,str3); if(Check(str3,str0)) putchar('3'); } } if(!ok) { Reverse(str,str4); if(Check(str4,str0)) putchar('4'); else { Change90(str4,str1); if(Check(str1,str0)) putchar('5'); else { Change90(str1,str2); if(Check(str2,str0)) putchar('5'); else { Change90(str2,str3); if(Check(str3,str0)) putchar('5'); } } } } if(!ok) { if(Check(str,str0))putchar('6'); else putchar('7'); } putchar('\n'); return 0; }
Name That Number (namenum)
将字典中的每个名字转换成数字串。然后寻找与给定数字串相同的输出名字即可。
这里注意题目要输入长度至多12的数字,这意味着int是不够的,long long 应该可以,不过我还是使用了string。
/* ID:kkkwjx1 LANG:C++ TASK:namenum */ #include <iostream> #include <cstdio> #include <cstring> #include <cmath> #include <algorithm> #include <fstream> using namespace std; struct Name { char str[15]; string num; }; char GetNum(char c) { if(c=='A'||c=='B'||c=='C') return '2'; if(c=='D'||c=='E'||c=='F') return '3'; if(c=='G'||c=='H'||c=='I') return '4'; if(c=='J'||c=='K'||c=='L') return '5'; if(c=='M'||c=='N'||c=='O') return '6'; if(c=='P'||c=='R'||c=='S') return '7'; if(c=='T'||c=='U'||c=='V') return '8'; if(c=='W'||c=='X'||c=='Y') return '9'; } int main() { freopen("namenum.in","r",stdin); freopen("namenum.out","w",stdout); ifstream fin; char buff[5000][15]; Name p[5000]; int k=0; fin.open ("dict.txt", ifstream::in); while (fin.good()) { fin.getline(p[k].str,200); int l=strlen(p[k].str); for(int i=0; i<l; ++i) p[k].num+=(GetNum(p[k].str[i])); k++; }; fin.close(); string tp; cin>>tp; bool ok=false; for(int i=0; i<k; ++i) if(tp==p[i].num) { cout<<p[i].str<<endl; ok=true; } if(!ok) cout<<"NONE"<<endl; return 0; }
Palindromic Squares (palsquare)
进制转换问题。思路很简单,先将从十进制1开始循环,平方之后转换成B进制,看是否是回文,如果是则将原数转换成B进制并输出还有回文。
/* ID:kkkwjx1 LANG:C++ TASK:palsquare */ #include <iostream> #include <cstdio> #include <cstring> #include <string> #include <algorithm> using namespace std; int B; bool Judge(char str[20]) { int l=strlen(str); for(int i=0; i<=l/2; ++i) if(str[i]!=str[l-1-i]) return false; return true; } void Strrev(char str[20]) { int l=strlen(str); for(int i=0; i<l/2; ++i) swap(str[i],str[l-1-i]); } void Convers(int val, char str[20],int R) { int i=0; while(val) { int x=val%R; if(x<10) str[i++]=x+'0'; else str[i++]='A'+(x-10); val=val/R; } str[i]=0; Strrev(str); } int main() { freopen("palsquare.in","r",stdin); freopen("palsquare.out","w",stdout); scanf("%d",&B); for(int i=1; i<=300; ++i) { char s[20]= {0}; Convers(i*i,s,B); if(Judge(s)) { char t[20]= {0}; Convers(i,t,B); printf("%s %s\n",t,s); } } return 0; }
Dual Palindromes (dualpal)
过了上个题这个就容易多了。枚举一下就行了。
/* ID:kkkwjx1 LANG:C++ TASK:dualpal */ #include <iostream> #include <cstdio> #include <cstring> #include <string> #include <algorithm> #define LN 30 using namespace std; bool Judge(char str[LN]) { int l=strlen(str); for(int i=0; i<=l/2; ++i) if(str[i]!=str[l-1-i]) return false; return true; } void Strrev(char str[LN]) { int l=strlen(str); for(int i=0; i<l/2; ++i) swap(str[i],str[l-1-i]); } void Convers(int val, char str[LN],int R) { int i=0; while(val) { int x=val%R; if(x<10) str[i++]=x+'0'; else str[i++]='A'+(x-10); val=val/R; } str[i]=0; Strrev(str); } bool OK(int val) { int cou=0; char tmp[LN]; for(int i=2; i<=10; ++i) { Convers(val,tmp,i); if(Judge(tmp)) cou++; if(cou>=2) return true; } return false; } int main() { freopen("dualpal.in","r",stdin); freopen("dualpal.out","w",stdout); int N,S; scanf("%d%d",&N,&S); for(int i=S+1,cou=0; cou<N; ++i) { if(OK(i)) { printf("%d\n",i); cou++; } } return 0; }
相关文章推荐
- USACO Chapter1-Getting started Section 1.1
- USACO - Chapter1 Section 1.2 - Milking Cows
- USACO - Chapter1 Section 1.2 - Transformations
- USACO - Chapter1 Section 1.2 - Palindromic Squares
- USACO - Chapter1 Section 1.2 - Dual Palindromes
- USACO - Chapter1 Section 1.1 - Friday the Thirteenth
- USACO: Section 1.2 -- PROB Palindromic Squares
- Chapter 3: Getting Started With Devops
- USACO - Chapter1 Section 1.1 - Broken Necklace
- USACO-Section 1.2 Palindromic Squares[...]
- USACO Training Section 1.2 Greedy Gift Givers
- USACO section1.2 Transformations 方块转换
- 【USACO-Chapter1-1.2】【模拟】Milking Cows
- USACO Section 1.2 Milking Cows 解题报告
- usaco Chapter 3 section 3.2 Feed Ratios
- USACO-Section 1.2 Palindromic Squares【暴力枚举】
- USACO section1.2 Name That Number 命名那个数字
- USACO-Section1.2 palsquare[字符处理]
- usaco Chapter 3 section 3.1 Agri-Net
- USACO - Chapter1 Section 1.4 - Arithmetic Progressions