CHEFVOTE - Editorial

I’am getting a runtime error(SIGSEGV) on submitting it while its working good on my system.can anyone help
thanks in advance

I passed it with a very very simple solution (in my mind).

First I have two sets: One contains persons was voted V1[], the other contains persons wasn’t voted V2[] (I have already checked whether sum of all is equal n or not, or whether there are any an element equals to n or not).

Then with V1[], I will always have more than one element, then I will set this: The person V1[i] will voted V1[i+1] with V1.Size()>=i>=1. V1[V1.Size()+1]=V1[1], respectively. In this process, I’ll decrease C[v1[i+1]] one.

With V2[], For all i-element in V2[], I will set V2[i] voted V1[j], with C[v1[j]]>0.

Time complexity: O(t * n * n)

My code: http://ideone.com/LwkheX

http://www.codechef.com/viewsolution/7000949.

I used a simple method . Let’s take a test case.

1

5

1 0 2 0 2

so we get 1 3 3 5 5,I stored this data in an array called cnt. Now I checked whether cnt is matching given sets of condition , if yes print the array, if no move first element to last and update our array i.e 3 3 5 5 1. Now we check again and this time condition is fulfilled so we need to print the array. By this method total n voting pattern are possible for n voters.

Example-

1 3 3 5 5

3 3 5 5 1

3 5 5 1 3

5 5 1 3 3

5 1 3 3 5

Before this step we need to check whether sum is equal to n or not and any element of array is not equal to n.

Sorry for my bad English.

@baljitsingh check for ->
1
6
0 0 0 2 2 2

My Solution

This is working for all test cases .Still WA…It would be helful if anyone can tell the error…

#include<bits/stdc++.h>
using namespace std;
struct data
{
int g;
int pos;
};
bool myfunc(struct data e,struct data d)
{
return e.g>d.g;
}
int main()
{
int t,n;
scanf("%d",&t);
while(t–)
{
scanf("%d",&n);
int a[n],b[n];
int visited[n],i,j,s=0,f=0;
data c[n];
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
c[i].g=a[i];
c[i].pos=i;
visited[i]=0;
s=s+a[i];
if(a[i]>=n)
f=1;
}
if(s!=n || f==1)
printf("-1\n");
else
{
sort(c,c+n,myfunc);
/for(i=0;i<n;i++)
printf("%d %d\n",c[i].g,c[i].pos);
/
for(i=0;i<n;i++)
{
for(j=c[i].pos+1;j<n;j++)
{
if(c[i].g==0)
break;
if(visited[j]==0)
{
c[i].g–;
visited[j]=1;
b[j]=c[i].pos+1;
}
}
for(j=0;j<c[i].pos;j++)
{
if(c[i].g==0)
break;
if(visited[j]==0)
{
c[i].g --;
visited[j]=1;
b[j]=c[i].pos+1;
}
}
}
for(i=0;i<n;i++)
printf("%d “,b[i]);
printf(”\n");
}
}
return 0;
}

hello sir. please help me where i made a mistake . i not able to know my mistake. after submitting my code i am getting wrong answer but i am not able to know where my mistake is? please help me . here is the link to my solution:- http://www.codechef.com/viewsolution/7009808

can anyone point the mistake? http://www.codechef.com/viewsolution/7002864

I can’t find mistake in following solution

using namespace std;
 
 
 
int main()
{
	int T = 0;
 
	int N = 0;
	int sum = 0;
	int tmp = 0;
	bool flag = false;
	int arr[100];
	int arr1[100];
	cin >> T;
 
	for (int i = 0; i < T; i++)
	{ 
		flag = false;
		sum = 0;
 
		cin >> N;
		for (int j = 0; j < N; j++)
		{
			cin >> arr[j];
			//sum += tmp;
 
			//if (sum>N || tmp >= N)
			//{
			//	flag = true;
			//}
		}
 
		for (int a = 0; a < N; a++)
		{
			sum += arr[a];
 
			if (arr[a] >= N)
			{
				flag = true;
				break;
			}
 
			
			if (sum > N)
			{
				flag = true;
				break;
			}
 
		}
 
		if (sum < N)
			flag = true;
		if (flag)
		{
			cout << -1 << "\n";
		}
 
		else
		{
			int count1 = 0;
			for (int a = 0; a < N; a++)
			{
				
				for (int b = 0; b < N; b++)
				{
					if (b != a)
					{
						if (arr[b]>0)
						{
							arr[b]--;
							cout << b + 1<<"\t";
						}
					}
				}
 
 
				/*
				if (arr[a] != 0 && a!=N-1)
				{
					cout << a + 2<<" ";
				}
				else if (arr[a] != 0 && a == N - 1)
				{
					cout << 1;
				}*/
			}
			cout << "\n";
 
		}
	
	}
 
 
 
	return 0;
}

O(t*n^2) http://www.codechef.com/viewsolution/7011638 TLE please clarify what mistake i am doing

// int a[n]- is the input array for each test case
// int k[n] - is the array which stores the output.
vector k (n);
fill (k.begin(),k.end(),-1);
for(int j=n-1;j>=0;j–){
int x=a[j];
int m;
m=j-1;
if(k[0]!=-1)
m=n-1;
for (; m>=-1; m–){
if(x==0)
break;
if(m==-1){
m=n;
continue;
}
if(k[m]==-1){
k[m]=j;
–x;
}
}
}
// ans is printing k[j] + 1; in a loop from 0 <= j < n, j++

@kevinsogo : Please, provide me test cases where this solution fails.

http://www.codechef.com/viewsolution/7007838

@dpraveen : Please show me a test case where my solution fails.

http://www.codechef.com/viewsolution/7007838

Somebody plz tell me the problem with this answer.i am getting wrong answer.i tried everything
http://www.codechef.com/viewsolution/7068018

Somebody plz tell me the problem with this answer.i am getting wrong answer.i tried everything http://www.codechef.com/viewsolution/7068018

My soln can anybody clarify the testcase it will fail, my code is here https://ideone.com/nDTg7t
thank you in advance
P.S. i just need a test case on which it fails.

https://www.codechef.com/viewsolution/13092836.

can somebody tell me my mistake

https://www.codechef.com/viewsolution/14414054
can someone tell what is wrong with my code i am using the simple algorithm for switching the no. if a[i] == i
i am still betting wrong answer

Hi , i don’t know if anyone has done this question in this way or not ,but here is my solution :
https://www.codechef.com/viewsolution/19279294
I have just continuously assigned each voter to the candidates in the same order 0,1,…n-1 , and if the voter and the candidate turn out to be same, i have matched them with the next one .In this way ,what happens is there are only two possibilities either one of them is left with self voting or no one . if only one of them is left(say x) , we can easily just find a voter(say a) who didn’t vote x and voted y and change the array in this way :- x voted a, and a voted y. in this way , the remaining vote of a is used up and everything else remains in the same order .