谁能告诉我爱奇艺奶牛那题我的问题在哪。。。。。

不知道为什么一直是通过60%。。。。。。
int main()
{
	int n;
	while (cin >> n)
	{
		int buff;
		vector<int> no;
		for (int i = 0; i < n; i++)
		{
			cin >> buff;
			no.push_back(buff);
		}

		sort(no.begin(), no.end(), less<int>());

		long long count = 1;
		for (int i = 0; i < n; i++)
			count = count * (no[i] - i);

		count = count % 1000000007;

		cout << count << endl;
	}

	return 0;
}

全部评论
每次都要mod一下,否则可能溢出
点赞 回复 分享
发布于 2017-09-10 21:07
for(inti = 0; i < n; i++)    count = (count * (no[i] - i)) % 1000000007; cout << count << endl;
点赞 回复 分享
发布于 2017-09-10 21:09
我在里面取模的也是50%啊。。。
点赞 回复 分享
发布于 2017-09-10 21:19
每一步都要判断是否过大吧
点赞 回复 分享
发布于 2017-09-10 21:07
你过了多少?
点赞 回复 分享
发布于 2017-09-10 21:07
在每次乘完后都要取个余,要不过程中就可能超范围
点赞 回复 分享
发布于 2017-09-10 21:08
懂了,谢谢各位。。。。
点赞 回复 分享
发布于 2017-09-10 21:09
你这个应该每次算完就mod,而不是最后mod,因为数很大,long long 是存不下的
点赞 回复 分享
发布于 2017-09-10 21:09
我也最后才Mod,60%。。。。
点赞 回复 分享
发布于 2017-09-10 21:09
import java.util.Arrays; import java.util.Scanner; /** * 奶牛编号 * @author WangYixin * */ public class Main2 { public static void main(String[] args) { // TODO Auto-generated method stub Scanner sc = new Scanner(System.in); while(sc.hasNext()){ int n = sc.nextInt(); //假设arr非降序,否则需要对齐排序 int[] arr = new int[n]; for(int i= 0;i<n;i++){ arr[i] = sc.nextInt(); } //!!!!新增加排序 Arrays.sort(arr); long[] f = new long[n]; f[0] = arr[0]; for(int i=1;i<n;i++){ //不影响前面+影响前面 long front = (arr[i]-arr[i-1])*f[i-1] % 1000000007; long after = f[i-1]*(arr[i-1]- i) ; f[i] = (front + after)% 1000000007; } System.out.println(f[n-1]); } } }
点赞 回复 分享
发布于 2017-09-10 21:09
同最后模的。。。哭死
点赞 回复 分享
发布于 2017-09-10 21:16
我也是在里面mod的 通过率50%呀。。
点赞 回复 分享
发布于 2017-09-10 21:40

相关推荐

一个菜鸡罢了:哥们,感觉你的简历还是有点问题的,我提几点建议,看看能不能提供一点帮助 1. ”新余学院“别加粗,课程不清楚是否有必要写,感觉版面不如拿来写一下做过的事情,教育经历是你的弱势就尽量少写 2. “干部及社团经历”和“自我评价”删掉 3. 论文后面的“录用”和“小修”啥的都删掉,默认全录用,问了再说,反正小修毕业前肯定能发出来 4. 工作经验和研究成果没有体现你的个人贡献,着重包装一下个人贡献
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务