sdut2624 Contest Print Server (大水+大坑)山东省第四届ACM省赛

本文主要是介绍sdut2624 Contest Print Server (大水+大坑)山东省第四届ACM省赛,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本文出自:http://blog.csdn.net/svitter

原题:http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2624


题意:为什么每次都是我做这么坑爹的题目TAT

一开始的名字我在想名字有没有空格,就像是之前

Sdut2411 Pixel density 山东省第三届ACM省赛(输入输出字符串处理)

这道题目,以至于第一篇WA我根本想不出到底是name的问题还是其他方面的问题。后来证明果然是没读懂题意,哎,坑爹啊。


给你五个数 n,s, x,  y , mod,然后输入n行数据,以Team_name +"request"+num+"pages."的形式给你。

然后就出现坑了。

这句话。the printer will break down when the printed pages counter reached s(s is generated by the function s=(s*x+y)%mod ) and then the counter will become 0. In the same time the last request will be reprint from the very begin if it isn't complete yet(The data guaranteed that every request will be completed in some time).

我的理解是,每当数量达到s,那么调用生成函数生成新的s,如果之前的没有打印完,那么重新全部打印出来。

但是事实上,是超过s的话,那么。。。。。。下面是我的AC代码,if前面的注释就是我先前的代码,问题就出在只要到达s(正好等于也算),那么就更新s。= =然后我就呵呵的WA了。(这两个的差距就在于是否多输出一个0.)

- -结合实践的话确实也能想明白- -就是你正好打完了你还更新s干什么。。。

下面是两个思路的AC代码:

//============================================================================
// Name        : 省赛字符串.cpp
// Author      : Vit
// Version     :
// Copyright   : Your copyright notice
// Description : Hello World in C++, Ansi-style
//============================================================================#include <iostream>
#include <stdio.h>
#include <string.h>using namespace std;struct Team
{char name[21];int num;
};Team te[102];int n, s, x, y, mod;void update(int &s)
{s = ((s * x) % mod + y % mod) % mod;if(s == 0)update(s);
}
void print(int i)
{printf("%d pages for %s\n", te[i].num, te[i].name);
}
void print(int i, int num)
{printf("%d pages for %s\n", num, te[i].name);
}void ace()
{//work pointint i, t;//num;//freopen("test", "r", stdin);scanf("%d", &t);while (t--){//input datascanf("%d%d%d%d%d", &n, &s, &x, &y, &mod);for (i = 0; i < n; i++){scanf("%s request %d pages", te[i].name, &te[i].num);}int sum = 0;//handle datafor (i = 0; i < n; i++){sum += te[i].num;
//			if(sum == s)
//			{
//                print(i)
//                update(s);
//                sum = 0;
//            }
//            elseif(sum > s){print(i, te[i].num + (s - sum));update(s);sum = 0;i--;}else{print(i);}} //end of iprintf("\n");} // end of t;
}int main()
{ace();return 0;
}

第二种:

//============================================================================
// Name        : 省赛字符串.cpp
// Author      : Vit
// Version     :
// Copyright   : Your copyright notice
// Description : Hello World in C++, Ansi-style
//============================================================================#include <iostream>
#include <stdio.h>
#include <string.h>using namespace std;struct Team
{char name[21];int num;
};Team te[102];int n, s, x, y, mod;void update(int &s)
{s = ((s * x) % mod + y % mod) % mod;if(s == 0)update(s);
}
void print(int i)
{printf("%d pages for %s\n", te[i].num, te[i].name);
}
void print(int i, int num)
{printf("%d pages for %s\n", num, te[i].name);
}void ace()
{//work pointint i, t;//num;//freopen("test", "r", stdin);scanf("%d", &t);while (t--){//input datascanf("%d%d%d%d%d", &n, &s, &x, &y, &mod);for (i = 0; i < n; i++){scanf("%s request %d pages", te[i].name, &te[i].num);}int sum = s;//handle datafor (i = 0; i < n; i++){if(sum >= te[i].num){print(i);sum -= te[i].num;}else if(sum < te[i].num){print(i, sum);update(s);sum = s;i--;}} //end of iprintf("\n");} // end of t;
}int main()
{ace();return 0;
}


这篇关于sdut2624 Contest Print Server (大水+大坑)山东省第四届ACM省赛的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/757488

相关文章

SQL Server数据库磁盘满了的解决办法

《SQLServer数据库磁盘满了的解决办法》系统再正常运行,我还在操作中,突然发现接口报错,后续所有接口都报错了,一查日志发现说是数据库磁盘满了,所以本文记录了SQLServer数据库磁盘满了的解... 目录问题解决方法删除数据库日志设置数据库日志大小问题今http://www.chinasem.cn天发

认识、理解、分类——acm之搜索

普通搜索方法有两种:1、广度优先搜索;2、深度优先搜索; 更多搜索方法: 3、双向广度优先搜索; 4、启发式搜索(包括A*算法等); 搜索通常会用到的知识点:状态压缩(位压缩,利用hash思想压缩)。

2014 Multi-University Training Contest 8小记

1002 计算几何 最大的速度才可能拥有无限的面积。 最大的速度的点 求凸包, 凸包上的点( 注意不是端点 ) 才拥有无限的面积 注意 :  凸包上如果有重点则不满足。 另外最大的速度为0也不行的。 int cmp(double x){if(fabs(x) < 1e-8) return 0 ;if(x > 0) return 1 ;return -1 ;}struct poin

2014 Multi-University Training Contest 7小记

1003   数学 , 先暴力再解方程。 在b进制下是个2 , 3 位数的 大概是10000进制以上 。这部分解方程 2-10000 直接暴力 typedef long long LL ;LL n ;int ok(int b){LL m = n ;int c ;while(m){c = m % b ;if(c == 3 || c == 4 || c == 5 ||

2014 Multi-University Training Contest 6小记

1003  贪心 对于111...10....000 这样的序列,  a 为1的个数,b为0的个数,易得当 x= a / (a + b) 时 f最小。 讲串分成若干段  1..10..0   ,  1..10..0 ,  要满足x非递减 。  对于 xi > xi+1  这样的合并 即可。 const int maxn = 100008 ;struct Node{int

red5-server源码

red5-server源码:https://github.com/Red5/red5-server

ImportError: cannot import name ‘print_log‘ from ‘logging‘

mmcv升级到2.+后删除了很多 解决 查FAQ文档,找到 添加到mmcv.utils下即可

安装SQL2005后SQL Server Management Studio 没有出来的解决方案

一种情况,在安装 sqlServer2005 时 居然出现两个警告: 1 Com+ 目录要求 2 Edition change check 郁闷!网上说出现两个警告,是肯定装不成功的!我抱着侥幸的态度试了下,成功了。 安装成功后,正准备 “ 仅工具、联机丛书和示例(T)” 但是安装不了,他提示我“工作站组件”安装过了对现有组件无法更新或升级。 解决办法: 1 打开“控

AtCoder Beginner Contest 370 Solution

A void solve() {int a, b;qr(a, b);if(a + b != 1) cout << "Invalid\n";else Yes(a);} B 模拟 void solve() {qr(n);int x = 1;FOR(i, n) FOR(j, i) qr(a[i][j]);FOR(i, n) x = x >= i ? a[x][i]: a[i][x];pr2(

ERROR 2003 (HY000): Can't connect to MySQL server on (10061)

在linux系统上装了一个mysql-5.5,启动后本机都是可以访问的,操作都正常,同时建了一个%的用户(支持远程访问), root@debian:/# mysql -u loongson -pEnter password: Welcome to the MySQL monitor. Commands end with ; or \g.Your MySQL connection id