↓ 跳过正文
  1. Posts/

bzoj1603: [Usaco2008 Oct]打谷机 (纱布题)

·589 字·2 分钟

#

Time Limit: 5 Sec Memory Limit: 64 MB Submit: 774 Solved: 593 [Submit][Status][Discuss]

Description
#

Farmer John有一个过时的打谷机(收割小麦),它需要带子来带动。发动机驱动轮1总是顺时针旋转的,用来带动转轮2,转轮2来带动转轮3,等等。一共有n(2<=n<=1000)个转轮(n-1条带子)。上面的图解描述了转轮的两种连接方式,第一种方式使得两个轮子旋转的方向相同,第二种则相反。 给出一串带子的信息: *Si—驱动轮 *Di—被动轮 *Ci—连接的类型(0=直接连接,1=交叉连接) 不幸的是,列出的信息是随即的。 作为样例,考虑上面的图解,n=4,转轮1是驱动轮,可以得知最后转轮4是逆时针旋转的。

Input
#

*第一行:一个数n *第二行到第n行:每一行有三个被空格隔开的数:Si,Di,Ci

Output
#

*第一行:一个单独的数,表示第n个转轮的方向,0表示顺时针,1表示逆时针。

Sample Input
#

4 2 3 0 3 4 1 1 2 0

Sample Output
#

1

思路:傻逼模拟题。。。。排下序。

代码实现
 1/* ***********************************************
 2Author :111qqz
 3Created Time :2016年03月31日 星期四 21时04分09秒
 4File Name :code/bzoj/1603.cpp
 5************************************************ */
 6
 7#include <cstdio>
 8#include <cstring>
 9#include <iostream>
10#include <algorithm>
11#include <vector>
12#include <queue>
13#include <set>
14#include <map>
15#include <string>
16#include <cmath>
17#include <cstdlib>
18#include <ctime>
19#define fst first
20#define sec second
21#define lson l,m,rt<<1
22#define rson m+1,r,rt<<1|1
23#define ms(a,x) memset(a,x,sizeof(a))
24typedef long long LL;
25#define pi pair < int ,int >
26#define MP make_pair
27
28using namespace std;
29const double eps = 1E-8;
30const int dx4[4]={1,0,0,-1};
31const int dy4[4]={0,-1,1,0};
32const int inf = 0x3f3f3f3f;
33const int N=1005;
34int n;
35
36struct node
37{
38    int s,d,c;
39
40    bool operator < (node b)const
41    {
42	return s<b.s;
43    }
44}a[N];
45int main()
46{
47	#ifndef  ONLINE_JUDGE
48	freopen("code/in.txt","r",stdin);
49  #endif
50	cin>>n;
51	for  ( int i = 1 ; i <= n-1 ; i ++) cin>>a[i].s>>a[i].d>>a[i].c;
52
53	sort(a+1,a+n);
54	int flag = 0;
55	for ( int i = 1 ;i  <= n-1 ; i++)
56	{
57	    if (a[i].c==1) flag^=1;
58	}
59	cout<<flag<<endl;
60
61  #ifndef ONLINE_JUDGE
62  fclose(stdin);
63  #endif
64    return 0;
65}

相关文章

hdu 5611 || BC #69 div2 1002 Baby Ming and phone number

·757 字·2 分钟
http://acm.hdu.edu.cn/showproblem.php?pid=5611 题意:给出n个电话号码(长度为11的字符串),满足特殊条件的价格为a,否则为b.特殊条件为最后5位数字一样,最后5位严格递增或者严格递减,最后8位是一个1980年1月一日到2016年12月31日的合法日期。问最后的价值。

cf 611 A||codeforces goodbye 2015 C. New Year and Domino

·465 字·1 分钟
http://codeforces.com/contest/611/problem/C 题意:给出一个n*m的地图,.表示可以空,#表示墙。一个东西需要占两个相邻的格子,问给定一个矩形,放一个东西的方案数。 思路:q很大。。应该是先预处理出来直接调用答案。。。计数问题累加性。。应该是前缀和之类。。需要做的就是怎么标记。。我的做法是竖着放和横着放的个数分开来存。从左往右从上往下,每次标记到后一个点。然后二维的前缀和。然后每次询问的时候,去掉最上边和最左边两条边界上对应的多加的点。

codeforces 31 C. Schedule

·845 字·2 分钟
http://codeforces.com/problemset/problem/31/C 题意:给出n个借用教室的时间安排,可能会有冲突。要求恰好去掉一个时间安排使得剩下的时间安排不冲突。问多多少种方案。 思路:首先一个直觉是。。除非初始就没有任何冲突。。不然这个答案不会很大。。

codeforces 1 B. Spreadsheets

·632 字·2 分钟
http://codeforces.com/problemset/problem/1/B 题意:给出了两种表格的表示方法。要求互相转化。 思路:直接模拟即可。注意和一般的进制转化不同的是,26进制对应的是1到26而不是0到25,所以要记得处理下借位。 代码实现 1/* *********************************************** 2Author :111qqz 3Created Time :2015年12月13日 星期日 19时46分09秒 4File Name :code/cf/problem/1B.cpp 5************************************************ */ 6 7#include <cstdio> 8#include <cstring> 9#include <iostream> 10#include <algorithm> 11#include <vector> 12#include <queue> 13#include <set> 14#include <map> 15#include <string> 16#include <cmath> 17#include <cstdlib> 18#include <ctime> 19#define fst first 20#define sec second 21#define lson l,m,rt<<1 22#define rson m+1,r,rt<<1|1 23#define ms(a,x) memset(a,x,sizeof(a)) 24typedef long long LL; 25#define pi pair < int ,int > 26#define MP make_pair 27 28using namespace std; 29const double eps = 1E-8; 30const int dx4[4]={1,0,0,-1}; 31const int dy4[4]={0,-1,1,0}; 32const int inf = 0x3f3f3f3f; 33 34char st[100]; 35int a26[100]; 36int a10[100]; 37 38void pre() 39{ 40 a26[0]=1; 41 for ( int i = 1 ;i<=5; i++) 42 { 43 a26[i] = a26[i-1]*26; 44// cout<<"i:"<<i<<" "<<a26[i]<<endl; 45 } 46 a10[0] = 1; 47 for ( int i = 1 ; i<=7 ; i++) 48 { 49 a10[i] = a10[i-1]*10; 50 } 51} 52void solve() 53{ 54 cin>>st; 55 int len = strlen(st); 56 int p1=-1,p2=-1; 57 for ( int i = 0 ; i < len ; i++) 58 { 59 char ch = st[i]; 60 if (ch>='A'&&ch<='Z') 61 { 62 if (p1==-1) 63 { 64 p1 = i ; 65 } 66 else 67 { 68 p2 = i; 69 break; 70 } 71 } 72 } 73 if (p2-p1==1||p2==-1) 74 { 75 int dig = 0 ; 76 int alp = 0; 77 int sum = 0 ; 78 int sum2 = 0 ; 79 for ( int i = len -1 ; i>= 0 ; i--) 80 { 81 char ch = st[i]; 82 if (!isdigit(ch)) 83 { 84 sum += (ch-'A'+1)*a26[alp]; 85 alp++; 86 } 87 else 88 { 89 sum2+= (ch-'0')*a10[dig]; 90 dig++; 91 } 92 } 93 printf("R%d\n",sum2,sum); 94 } 95 else 96 { 97 int dig1 = 0 ; 98 int dig2 = 0; 99 int sum1 = 0 ; 100 int sum2 = 0 ; 101 int p = 1; 102 for ( int i = len-1 ; i>= 0 ; i-- ) 103 { 104 char ch = st[i]; 105 if (isdigit(ch)) 106 { 107 // cout<<"ch:"<<ch<<endl; 108 if (p) 109 { 110 sum1+=(ch-'0')*a10[dig1]; 111 // cout<<"sum1:"<<sum1<<endl; 112 dig1++; 113 } 114 else 115 { 116 sum2+=(ch-'0')*a10[dig2]; 117 dig2++; 118 } 119 120 121 } 122 else 123 { 124 p = 0 ; 125 } 126 } 127// cout<<"sum1:"<<sum1<<" sum2:"<<sum2<<endl; 128 int cnt = 0 ; 129 int b[50]; 130 while(sum1) 131 { 132 cnt++; 133 b[cnt] = sum1; 134 sum1/=26; 135// cout<<"sum1::::"<<sum1<<endl; 136 } 137// cout<<"cnt:"<<cnt<<endl; 138 for ( int i = 1 ; i <= cnt -1 ; i ++) 139 { 140 if (b[i]<=0) 141 { 142 b[i]+=26; 143 b[i+1]--; 144 } 145 } 146 while (b[cnt]==0) cnt--; 147 148 for ( int i = cnt ; i >=1 ; i--) 149 { 150 151 // cout<<"b[i]:"<<b[i]<<endl; 152 cout<<char(b[i]+'A'-1); 153 } 154 cout<<sum2<<endl; 155 156 157 158 159 } 160 161 162} 163int main() 164{ 165 #ifndef ONLINE_JUDGE 166 freopen("code/in.txt","r",stdin); 167 #endif 168 169 pre(); 170 int T; 171 cin>>T; 172 while (T--) 173 { 174 solve(); 175 } 176 177 #ifndef ONLINE_JUDGE 178 fclose(stdin); 179 #endif 180 return 0; 181}

codeforces 158 B. Taxi

·419 字·1 分钟
http://codeforces.com/problemset/problem/158/B 题意:n组人,每组有si个(1<=si<=4),每辆车能装4个人。问最少需要多少辆车装下所有人并且保证同一组的人在一辆车里。 思路:统计人数分别为1,2,3,4的人数。对于4的直接加到答案。贪心的思路是:优先用人数少的去填人数多的。