【codechef】Devu and his Class(巧妙的 模拟,分类讨论)
来源:互联网 发布:十大网络剧排行榜 编辑:程序博客网 时间:2024/05/04 22:19
Devu likes to play with a lock of N dials. Each dial rotates from numbers 0 to 9 clockwise (i.e. 0 to 1, 2 to 3 and 8 to 9). You can not rotate from 9 to 0.
Initially all the dials of the lock are set to 0. From the current lock, Devu can move any dial to at most 10 different positions (i.e. 0 to 9), so there are total 10N different locks possible.
Let us say for a lock we define cost of converting the initial lock (all zeros) to this lock. For this, we have to rotate each dial to corresponding position in the lock. Cost of moving a single dial to value x takes xseconds.
eg. cost of moving to 123 is 1 + 2 + 3 = 6 and cost of moving to 99 is 9 + 9 is 18.
Now Devu has to hurry up to meet his girlfriend, So he has at most M seconds to spend, he wonders how many possible locks he can create such that when a lock is represented as a decimal number, it should be divisible by P. As answer could be large, print answer modulo 998244353.
Input
Only line of input will contain three integers N, P, MM respectively. Use of MM is defined in the output section.
Output
Print a single line containing MM + 1 integers, ith (0 based indexing) of them should represent the
answer for the problem with given N, P and M = i.
Example
Input:80BB0BG0BBGG1BGG1BGGB1BBBGG2BBGG2BGBOutput:-10111310
Explanation
Note type of the first 3 test cases is 0. So c(i, j) = 1. Hence we just have to count minimum number of swaps needed.
Example case 1. There is no way to make sure that both the boys does not stand nearby. So answer is -1.
Example case 2. Arrangement is already valid. No swap is needed. So answer is 0.
Example case 3. Swap boy at position 1 with girl at position 2. After swap the arrangement will be BGBGwhich is a valid arrangement. So answer is 1.
Now type of the next 3 test cases is 1. So c(i, j) = |j − i|, that is, the absolute value of the difference betweeni and j.
Example case 4. Swap boy at position 0 with girl at position 1. After swap the arrangement will be GBGwhich is a valid arrangement. So answer is |1 - 0| = 1.
Example case 5. Swap boy at position 0 with girl at position 1. After swap the arrangement will be GBGBwhich is a valid arrangement. So answer is |1 - 0| = 1.
Example case 6. Swap boy at position 1 with girl at position 4. After swap the arrangement will beBGBGB which is a valid arrangement. So answer is |4 - 1| = 3.
Then type of the last 2 test cases is 2. So c(i, j) = (j − i)2
Example case 7. Swap boy at position 1 with girl at position 2. After swap the arrangement will be BGBGwhich is a valid arrangement. So answer is (2 - 1)2 = 1.
Example case 8. Arrangement is already valid. No swap is needed. So answer is 0.
http://www.codechef.com/problems/DEVCLASS
#include<iostream> #include<algorithm> #include<string> #include<map> #include<set> #include<cmath> #include<string.h> #include<stdlib.h> #include<cstdio> #define ll long long using namespace std; int main(){string s; int i,j,ans,type,l,g,b,e,t; scanf("%d",&t); while(t--){scanf("%d",&type); cin>>s; l=s.length(); g=0;b=0;ans=0;j=0;e=0; for(i=0;i<l;i++){ if(s[i]=='G') g++; else b++; } if(type==0){ //0次方(不管abs(j-i)等于什么都为1) if(g==b+1){for(i=0;i<l;i=i+2) //分类 if(s[i]=='B') ans++; } else if(b==g+1){ for(i=0;i<l;i=i+2) //分类 if(s[i]=='G') ans++; } else if(b==g){ e=0; for(i=0;i<l;i=i+2){ //分类 if(s[i]=='B') ans++; else e++; } ans=min(ans,e); } else ans=-1; } else{ //当type>0时都是一样处理(相邻交换,其实题目的type次方是没用的) if(g==b+1){ for(i=0;i<l;i=i+2){ while(s[j]!='G') j++; ans+=abs(i-j); j++;} } else if(b==g+1){ for(i=0;i<l;i=i+2){ while(s[j]!='B') j++;ans+=abs(i-j); j++; } } else if(b==g){ for(i=0;i<l;i=i+2){ while(s[j]!='B') j++; e+=abs(i-j); j++; }j=0; for(i=0;i<l;i=i+2){ while(s[j]!='G') j++; ans+=abs(i-j); j++; } ans=min(ans,e); } else ans=-1; } printf("%d\n",ans); } return 0;}/*16BBBGGG*/
- 【codechef】Devu and his Class(巧妙的 模拟,分类讨论)
- 【codechef】Chef and His Friend (甲乙相遇的概率,分类)
- 【codechef】Devu and binary String(字符串不超过连续k个相同,最少改几个,分类)
- 439 D. Devu and his Brother
- CF 439D Devu and his Brother
- Codeforces 439D Devu and his Brother
- Codeforces 439D Devu and his Brother
- CodeForces 439D Devu and his Brother
- CodeChef - CDSW153 Virat and his challenge(容斥原理)
- CF 439D(251D题)Devu and his Brother
- 【CodeChef AUG16 T4】Chef and His Garden
- 【codechef】Sereja and Votes(模拟)
- Codeforces Round #251 (Div. 2) D. Devu and his Brother
- Codeforces Round#251(Div 2)D Devu and his Brother
- Codeforces Round #251 (Div. 2) D Devu and his Brother
- Codeforces 439D Devu and his Brother 三分
- Codeforces 439D Devu and his Brother(排序)
- Codeforces Round #251 (Div. 2)-D. Devu and his Brother
- Python之linecache模块
- 【计算几何】点在多边形内部
- 【翻译自mos文章】为table 的partition 建立synonym
- iOS多线程编程之NSThread的使用(★★★推荐,为原作者点赞★★★)
- 转:Android开发之onClick事件的三种写法
- 【codechef】Devu and his Class(巧妙的 模拟,分类讨论)
- LeetCode—Binary Tree Right Side View 二叉树层序遍历变形,Flatten Binary Tree to Linked List前序遍历变形
- 基于PredictionIO的推荐引擎打造,及大规模多标签分类探索
- CLR编写Insert Trigger
- 群
- android OnScrollListener 监听的简单应用
- html 页面转wap 页面
- 搜索引擎的查询意图识别(关联分析)
- ubuntu14.04升级eclipse到最新版