USACO Chapter 1 Section 1.1

USACO的题解和翻译已经很多了。。。

我只是把自己刷的代码保存一下。

1、PROB Your Ride Is Here

 1 /*
 2 ID:xiekeyi1
 3 PROG:ride
 4 LANG:C++
 5 */
 6
 7 #include<bits/stdc++.h>
 8 using namespace std ;
 9
10 int main()
11 {
12     freopen("ride.in","r",stdin);
13     freopen("ride.out","w",stdout) ;
14     string s1 , s2 ;
15     cin >> s1 >> s2 ;
16     int ans1 = 1 , ans2 = 1 ;
17     for( int i = 0 ; i < s1.size() ; i++)
18         ans1 *= (s1[i] - ‘A‘ + 1 ) % 47 ;
19     for( int i = 0 ; i < s2.size() ; i++)
20         ans2 *= (s2[i] - ‘A‘ + 1 ) % 47 ;
21     ans1 %= 47 , ans2 %= 47 ;
22     if( ans1 == ans2 )
23         cout << "GO" << endl ;
24     else
25         cout << "STAY" << endl ;
26     return 0 ;
27 }

ride

2、PROB Greedy Gift Givers

 1 /*
 2 ID:xiekeyi1
 3 PROG:gift1
 4 LANG:C++
 5 */
 6
 7 #include<bits/stdc++.h>
 8 using namespace std ;
 9
10 map<string,int> na;
11 struct
12 {
13     string name ;
14     int account = 0 ;
15     int begiven = 0 ;
16 }a[1000];
17 int main()
18 {
19     freopen("gift1.in","r",stdin);
20     freopen("gift1.out","w",stdout);
21     int n ;
22     cin >> n;
23     for( int i = 1 ; i <= n ; i++)
24     {
25         cin >> a[i].name ;
26         na[ a[i].name] = i ;
27     }
28     string tempname ;
29
30     int tempmoney , ng ;
31     while( cin >> tempname >> tempmoney >> ng )
32     {
33         int tem = 0 ;
34         a[ na[tempname] ].account -= tempmoney ;
35         if( ng != 0 )
36         {
37             tem = tempmoney / ng ;
38             a[ na[tempname] ].account = a[ na[tempname] ].account - ( a[ na[tempname] ].account + tem * ng ) ;
39         }
40
41         for( int i = 1 ; i <= ng ; i++)
42         {
43
44             string t ;
45             cin >> t ;
46             a[ na[t] ] . begiven += tem ;
47         }
48     }
49
50     for( int i = 1 ; i <= n ; i++)
51     {
52         cout << a[i].name << ‘ ‘ << a[i].account + a[i].begiven << endl ;
53     }
54     return 0 ;
55 }

gift

3、PROB Friday the Thirteenth

 1 /*
 2 ID:xiekeyi1
 3 PROG:friday
 4 LANG:C++
 5 */
 6
 7 #include<bits/stdc++.h>
 8 using namespace std ;
 9 int a[10] = {0} ;
10
11 bool isleapyear( int n )
12 {
13     if( n % 4 == 0 && n % 100 != 0 )
14         return true ;
15     else if( n % 400 == 0 )
16         return true ;
17     else
18         return false ;
19 }
20
21 int days_month( int y , int m )
22 {
23     switch(m){
24         case 1 :
25         case 3 :
26         case 5 :
27         case 7 :
28         case 8 :
29         case 10:
30         case 12:
31             return 31 ;
32         case 4 :
33         case 6 :
34         case 9 :
35         case 11 :
36             return 30 ;
37         case 2:
38             if(  isleapyear(y) )
39                 return 29 ;
40             else
41                 return 28 ;
42         }
43 }
44
45 int days( int y , int m , int d )
46 {
47     int ans = 0 ;
48     for( int i = 1900 ; i < y ; i++)
49     {
50         if( isleapyear( i )  )
51             ans+=366;
52         else
53             ans+=365;
54     }
55
56     for( int i = 1 ; i < m ; i++)
57     {
58         ans+=  days_month( y , i ) ;
59     }
60
61     ans += d ;
62
63     return ans - 1  ;
64 }
65
66
67 int main()
68 {
69     freopen("friday.in" , "r" , stdin) ;
70     freopen("friday.out" , "w" , stdout) ;
71     int n ;
72     cin >> n ;
73     for( int i = 1900 ; i < ( n + 1900 )  ; i++)
74     {
75         for( int j = 1 ; j <= 12 ; j++)
76              a[ days(i,j,13) % 7 + 1 ]++ ;
77     }
78
79     cout << a[6] << ‘ ‘ << a[7] << ‘ ‘ << a[1] << ‘ ‘ << a[2] << ‘ ‘ << a[3] << ‘ ‘ << a[4]
80          << ‘ ‘ << a[5] << endl ;
81     return 0 ;
82 }

friday

4、PROB Broken Necklace

前面三道题都是1A,我还说怪不得大家的说USACO简单。

我虽然感觉做起来对初学者有点难,但是感觉数据都比较水, 1A美滋滋。

结果卡在这道题上好久

本来是准备模拟剪断,后来发现是个环,然后就想复制一遍再模拟,结果写的很挫,代码很多很崩。

后来看了题解,发现这个方法很巧妙。

无需考虑w的。进行分类讨论,只有rb和br两种情况。 但是如果是rrrrwbbbbrb呢??

问:如何解决w的重复运算与漏算问题? w的漏算很容易考虑,至于重算的情况那得到的总长度必然超过n,这种情况下显然是可以把所有珠子都取出来的。直接输出n就可以了。

这是USACO中提到的一个思路(应该四种思路,其中还有DP)

代码如下:

 1 /*
 2 ID:xiekeyi1
 3 PROG:beads
 4 LANG:C++
 5 */
 6 #include<bits/stdc++.h>
 7 using namespace std ;
 8 int main()
 9 {
10     freopen("beads.in","r",stdin);
11     freopen("beads.out","w",stdout);
12
13     int n ;
14     string s ;
15     cin >> n >> s ;
16     s+=s;
17     int a = 0 , b = 0 , w = 0 , c = 0 , ans = 0 ;
18     for( int i = 0 ; i < n*2 ; i++)
19     {
20         if( s[i]  == ‘w‘ ) b++,w++;
21         else if( s[i] == c ) b++,w=0;
22         else
23         {
24             ans = max( a+b,ans) ;
25
26             a = b - w ; b = w + 1 ; w = 0 ; c = s[i] ;
27         }
28
29     }
30     ans = max( a+b , ans ) ;
31
32     cout << min( ans , n ) << endl ;
33     return 0 ;
34 }
35
36         

breads

这个很巧妙,不断的试,

当时  a = b - w  b = w + 1 这里我一直不理解,我认为换成 a = b , b = 1 也可以。

后来发现前者实际上是把 w和前面 后面都计算了一次,而后者不行。

这道题也让我学到了对于环的处理可以复制一次再处理。

时间: 2024-12-17 05:03:49

USACO Chapter 1 Section 1.1的相关文章

USACO Chapter 1 Section 1.3

1 /* 2 ID:xiekeyi1 3 PROG:milk 4 LANG:C++ 5 */ 6 7 #include<bits/stdc++.h> 8 using namespace std ; 9 10 const int maxm = 5050 ; 11 12 struct P 13 { 14 int price ; 15 int amount ; 16 }a[maxm]; 17 18 bool cmp( struct P a , struct P b ) 19 { 20 return

USACO Chapter 1 Section 1.2

不知道为什么感觉1.2比1.1反而简单不少 1 /* 2 ID:xiekeyi1 3 PROG:milk2 4 LANG:C++ 5 */ 6 #include<bits/stdc++.h> 7 using namespace std ; 8 const int MAXN = 5010; 9 struct point 10 { 11 int begin , end ; 12 } a[MAXN] ; 13 14 15 bool cmp( struct point a , struct point

USACO(含training section)水题合集[5/未完待续]

(1) USACO2.1 Ordered Fractions 枚举 排序即可,注意1/1 #include<iostream> #include<cstdio> #include<algorithm> #include<cstring> using namespace std; const int N=165,L=1e5; struct fr{ int a,b; fr(int q=0,int w=1):a(q),b(w){} }f[L]; int n,cnt

USACO CHAPTER 1 1.1 Ride 水题

水题,主要是学习文件输入输出. 1 /* 2 ID: ijustwa1 3 LANG: C++ 4 TASK: ride 5 */ 6 #include<cstdio> 7 #include<cstring> 8 9 using namespace std; 10 11 const int base=16; 12 const int mod=47; 13 14 char s[10]; 15 char t[10]; 16 17 int main() 18 { 19 FILE *fin

USACO Chapter 1 解题总结

1.1.1 Your Ride Is Here 基本字符串操作,无压力. 1.1.2 Greedy Gift Givers 基础模拟题,弄明白题意,不怕麻烦,就OK了. 1.1.3 Friday the Thirteenth 自己的做法:三维数组代表年月日,400的数据范围不大,模拟走一下时间的流逝过程即可.时间复杂度O(N*12*31),多好玩. 官方标程好像用到了一个神奇的公式,好像是什么蔡勒公式. 1.1.4 Broken Necklace 2*N的拆环,枚举断点找即可.在找的过程中先要解

CHAPTER 2 Database Environment

Chapter Objectives   (章节目标) In this chapter you will learn:  (在本章中,你将学习:) The purpose and origin of the three-level database architecture.  (三层数据库的架构和起源.) The contents of the external, conceptual, and internal levels. (外部.概念.内部层次的内容.) The purpose of

【转】LaTeX 符号命令大全

函数.符号及特殊字符 声调 语法 效果 语法 效果 语法 效果 \bar{x} \acute{\eta} \check{\alpha} \grave{\eta} \breve{a} \ddot{y} \dot{x} \hat{\alpha} \tilde{\iota} 函数 语法 效果 语法 效果 语法 效果 \sin\theta \cos\theta \tan\theta \arcsin\frac{L}{r} \arccos\frac{T}{r} \arctan\frac{L}{T} \sin

【LaTeX】E喵的LaTeX新手入门教程(2)基础排版

换了块硬盘折腾了好久..联想的驱动真坑爹.前情回顾[LaTeX]E喵的LaTeX新手入门教程(1)准备篇文档框架嗯昨天我们已经编写了一个最基本的文档,其内容是这样的:\documentclass{article}\begin{document}XXX is a SB.\end{document}这个文档呢其实是分为两部分的:一部分是\begin{document}之前的那部分也就是第一行,这一部分我们称之为导言区.导言区的内容可以不只一行,它的作用是完成文档的基础设定.比如在这个文档中,我们使用

LaTex 入门2

以book模板为例: \documentclass{book} \usepackage{amsmath} \begin{document} \title{This is my book} \author{kirchhoff} \date{} %用于去掉maketitle默认输入的日期 \maketitle \tableofcontents %生成目录 \mainmatter %表示文章正文部分开始了,这样能影响目录的起始页码 \part{elementary} %part1 \chapter{i