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

不知道为什么一直是通过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

相关推荐

爱看电影的杨桃allin春招:我感觉你在炫耀
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务