昨天第一题竟然还错了。。。真是忧伤。现在改过来了
Problem A Sereja and Coat Rack
一共有n个房间第i个能赚ai的钱不够一个房间陪d钱,算最后的赚了多少。
贪心思想赚的少的先来。
1 #include2 #include 3 #include 4 #include 5 #define INF 0x7fffffff 6 7 using namespace std; 8 bool cmp(int a, int b){ return a>b;} 9 int main()10 {11 // freopen("in.txt", "r", stdin);12 13 int n, d, a[111], m;14 while(scanf("%d%d", &n, &d)!=EOF){15 for(int i=0; i n?(m-n):0);25 cout << ans << endl;26 }27 return 0;28 }
Problem B Sereja and Suffixes
统计第i个后有多少个不同的数,开局初始化一下即可。然后每次查询。1 #include2 #include 3 #include 4 #include 5 #define INF 0x7fffffff 6 7 using namespace std; 8 int tag[100100], dp[100100], a[100100]; 9 10 int main()11 {12 // freopen("in.txt", "r", stdin);13 int n, m;14 while(scanf("%d%d", &n, &m)!=EOF){15 memset(tag, 0, sizeof tag);16 memset(dp, 0, sizeof dp);17 for(int i=0; i =0; i--){21 if(tag[a[i]]==0){22 tag[a[i]] = 1;23 dp[i] = dp[i+1]+1;24 }else dp[i] = dp[i+1];25 }26 for(int i=0; i
Problem C Sereja and Algorithm
找规律题,想了半天。最终结论很简单只要满足abs(a-b)>=2 || abs(b-c)>=2 || abs(c-a)>=2返回YES否则。
1 #include2 #include 3 #include 4 #include 5 #define INF 0x7fffffff 6 7 using namespace std; 8 9 int dp[100100][5];10 char str[100100];11 12 bool Judge(int a, int b, int c){13 if(a==0 || b==0 || c==0) return false;14 if(abs(a-b)>=2 || abs(b-c)>=2 || abs(c-a)>=2)return false;15 return true;16 }17 18 int main()19 {20 // freopen("in.txt", "r", stdin);21 while(cin >> str+1)22 {23 int len = strlen(str+1);24 for(int i=1; i<=len; i++){25 dp[i][0] = dp[i-1][0];26 dp[i][1] = dp[i-1][1];27 dp[i][2] = dp[i-1][2];28 dp[i][str[i]-'x'] ++;29 }30 int q, l, r;31 scanf("%d", &q);32 for(int i=0; i