代码网站推荐,google推广技巧,汽车网站网址大全,w3school网站建设教程1. 拼点游戏 C和S两位同学一起玩拼点游戏。有一堆白色卡牌和一堆蓝色卡牌#xff0c;每张卡牌上写了一个整数点数。C随机抽取n张白色卡牌#xff0c;S随机抽取n张蓝色卡牌#xff0c;他们进行n回合拼点#xff0c;每次两人各出一张卡牌#xff0c;点数大者获得三颗巧克力每张卡牌上写了一个整数点数。C随机抽取n张白色卡牌S随机抽取n张蓝色卡牌他们进行n回合拼点每次两人各出一张卡牌点数大者获得三颗巧克力小者获得一颗巧克力如果点数相同每人各得二颗巧克力使用过的卡牌不得重复使用。已知C和S取到的卡牌点数请编程计算S最多和最少能得到多少颗巧克力。 输入 输入包含多组测试数据。 每组测试数据的第一行是一个整数n(1n1000)接下来一行是n个整数表示C抽到的白色卡牌的点数下一行也是n个整数表示S抽到的蓝色卡牌的点数。 输入的最后以一个0表示结束。 输出 对每组数据输出一行内容是两个整数用空格格开分别表示S最多和最少可获得的巧克力数。 样例输入 3 92 83 71 95 87 74 2 20 20 20 20 2 20 19 22 18 0 样例输出 9 5 4 4 4 4 参考答案 #include iostream #include algorithm #include cstdio #include cstring
using namespace std;
const int N 1000; int n, c[N], s[N];
int solve(int c[], int s[]) { int ans 0, cl 0, cr n - 1, sl 0, sr n - 1; while(sl sr) { if (s[sr] c[cr]) sr--, cr--, ans 3; else if (s[sr] c[cr]) sl, cr--, ans; else if (s[sl] c[cl]) sl, cl, ans 3; else if (s[sl] c[cr]) sl, cr--, ans; else sl, cr--, ans 2; } return ans; }
int main() { while (~scanf(%d, n) n) { for (int i 0; i n; i) scanf(%d, c[i]); for (int i 0; i n; i) scanf(%d, s[i]); sort(c, c n); sort(s, s n); printf(%d %d\n, solve(c, s), 4 * n - solve(s, c)); } return 0; } 2. 数字变换 给定一个包含5个数字0-9的字符串例如 “02943”请将“12345”变换到它。 你可以采取3种操作进行变换 1. 交换相邻的两个数字 2. 将一个数字加1。如果加1后大于9则变为0 3. 将一个数字加倍。如果加倍后大于9,则将其变为加倍后的结果除以10的余数。 最多只能用第2种操作3次第3种操作2次 求最少经过多少次操作可以完成变换。
输入 有最多 100,000 组数据 每组数据就是包含5个数字的字符串 输出 对每组数据输出将12345变换到给定字符串所需要的最少操作步数。如果无法变换成功输出-1 样例输入 12435 99999 12374 样例输出 1 -1 3
提示 由于测试数据太多如果对每组数据都从头进行搜索就会超时。 建议先做预处理即以“12345”作为初始状态做一遍彻底的广搜找出“12345”经合法变换能够到达的所有字符串并记录到达这些字符串各需要多少步操作。 然后对读入的每组数据在上述预处理记录的结果中进行查询即可。 更多内容请查看网站
网站链接
青少年软件编程历年真题模拟题实时更新