头条编程题用户喜好值有100%AC的吗?

我付一个JS的暴力代码吧,只能过50%:
var n = Number(readline());
var arr = readline().split(" "));
var q = Number(readline());
var line;
while(line = readline()){
	line = line.split(" ").map(function(elem, index) {
		return Number(elem);
	});
	var l = line[0];
	var r = line[1];
	var k = line[2];
	var num = 0;
	for (var i = l-1; i < r; i++){
		if(arr[i] == k){
			num++;
		}
	}
	print(num);
}
请问有100%的同学吗?能讲些写思路吗?谢谢咯
全部评论
//先排序,然后两次二分搜索找到喜好值==k的区间,统计即可 import java.util.*; class ac { int value=0; int num=0; public ac(int num,int value) { this.value=value; this.num=num; } } public class Main{ public static void main(String[] args){ Scanner sc = new Scanner(System.in); while(sc.hasNext()){ int n= sc.nextInt(); ac[] a= new ac[n]; for(int i=0;i<n;i++){ int k=sc.nextInt(); a[i]=new ac(i+1, k);} Arrays.sort(a,new Comparator<ac>() { @Override public int compare(ac o1, ac o2) { // TODO Auto-generated method stub return Integer.compare(o1.value, o2.value); } }); int q=sc.nextInt(); for(int i=0;i<q;i++){ int l=sc.nextInt(); int r=sc.nextInt(); int k=sc.nextInt(); int left=0; int right=a.length-1; while(left<=right){ int mid=(right-left)/2+left; if(a[mid].value<=k)left=mid+1; else right=mid-1; } int rindex=right;left=0; while(left<=right){ int mid=(right-left)/2+left; if(a[mid].value>=k)right=mid-1; else left=mid+1; } right=rindex; int res=0; while(left<=right){ if(a[left].num>=l && a[left].num<=r)res++;left++; } System.out.println(res); } } } }//最后沉痛悼念我0%的第一题,做懵逼了,以后想不到就暴力先试试
点赞 回复 分享
发布于 2017-09-10 21:50
#include<stdio.h> int main() { int n = 0; int q = 0; int i = 1, j = 0, k = 0; int a, b, sum; int data[300010]; scanf("%d", &n); for (i = 1; i <= n; i++) { scanf("%d", data + i); } scanf("%d", &q); for (i = 0; i < q; i++) { sum = 0; scanf("%d %d %d", &a, &b, &k); for (j = a; j <= b; j++) { sum += (data[j] == k); } printf("%d\n", sum); } return 0; }
点赞 回复 分享
发布于 2017-09-10 21:15
用个300个桶好像可以ac(大概)
点赞 回复 分享
发布于 2017-09-10 21:16
c语言暴力ac,java暴力ac 50%
点赞 回复 分享
发布于 2017-09-10 21:16
真的。。用js做题是自讨苦吃。
点赞 回复 分享
发布于 2017-09-10 21:19
简单的看了下,发现三个题都有人暴力过了= = 我这边愚蠢的先写了分析题有点可惜
点赞 回复 分享
发布于 2017-09-10 21:28
( ̄▽ ̄)/都是大佬
点赞 回复 分享
发布于 2017-09-10 21:39
java用BufferedReader应该会比Scanner快
点赞 回复 分享
发布于 2017-09-10 21:43
同50%
点赞 回复 分享
发布于 2017-09-10 21:43
我莫队冲过去了。 复杂的O(q*sqrt(n)*log(n))
点赞 回复 分享
发布于 2017-09-10 21:54
用的cin。。过了95%啊。。 好长时间不用c++,忘了scanf更快了。
点赞 回复 分享
发布于 2017-09-10 22:15
//喜爱度是整数,不好定义,直接用map,key是喜爱度,value是用户编号 //map建好直接查询计数 #include <iostream> #include <vector> #include <algorithm> #include <map> #include <math.h> using namespace std; int main() {     int n;     while (cin>>n){         map<int,vector<int>> vec;         for(int i=1;i<=n;i++)         {             int temp;             cin>>temp;             vec[temp].push_back(i);         }         int q;         cin>>q;         vector<int> res(q,0);         for(int i=0;i<q;i++){             int l,r,k;             int cur=0;             cin>>l>>r>>k;             for(auto j=vec[k].begin();j!=vec[k].end();j++){                 if((*j)<=r && (*j)>=l) cur++;             }             res[i]=cur;         }         for(int i=0;i<res.size();i++){             cout<<res[i]<<endl;         }     }     return 0; }
点赞 回复 分享
发布于 2017-09-10 22:24
这是用户喜好,只要将查询排序,然后依次扫描就好100%: http://paste.ubuntu.com/25506027/ 这是那个有多少重复珠子的题: 纯暴力扫描就好了啊!!!100% 有一串(首尾相连)的珠子(共N个),现在总共有C种颜色,第i个珠子上有num[i]种颜色(并提供每个颜色),如果连续相连的M个珠子上出现了相同的颜色x,那么认为颜色x是不合法的。问这串珠子上有多少种不合法的颜色。 代码地址:http://paste.ubuntu.com/25505991/ 蒟蒻663
点赞 回复 分享
发布于 2017-09-10 22:29

相关推荐

点赞 4 评论
分享
牛客网
牛客企业服务