您的位置:首页 > 其它

Codeforces Round #316 (Div. 2)

2015-08-22 20:02 375 查看
A. Elections

1.对每个人的票数进行统计

2.票数最大的人的序号即为答案

#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <vector>
#include <cmath>
#include <algorithm>
#include <set>
#include <map>
#include <queue>
#include <ctime>
#include<assert.h>
#define pb push_back
#define ll long long
#define mp make_pair
#define f first
#define s second
#define pii pair < int, int >
#define ull unsigned long long
#define pll pair < ll, ll >
#define forit(s) for(__typeof(s.begin()) it = s.begin(); it != s.end(); it ++)
#define all(s) s.begin(), s.end()

const int inf = (1ll << 31) - 1;
const int maxn = (int) 1e5 + 10;
#define max(a, b) ((a) > (b) ? (a) : (b))
#define min(a, b) ((a) < (b) ? (a) : (b))
using namespace std;
int n = 0, m = 0, vote[110][110];
int main()
{
//freopen("data_A.txt", "r", stdin);
int ans = 0;
while(scanf("%d%d", &n, &m) != EOF)
{
for (int i = 1; i <= m; i++)
{
for (int j = 1; j <= n; j++)
{
scanf("%d", &vote[i][j]);
}
}
int candian[110], candiai[110];
int recind = 0;
for (int i = 1; i <= m; i++)
{
int maxn = -inf;
for (int j = 1; j <= n; j++)
{
if (maxn < vote[i][j])
{
maxn = vote[i][j];
recind = j;
}
}
for (int j = 1; j <= n; j++)
{
if (vote[i][j] == maxn)
{
if (j < recind)
{
recind = j;
}
}
}
candiai[i] = recind;
}
int rec[110];
int maxi = 0;
int maxn = 0;
for (int i = 1; i <= n; i++)
{
int addn = 0;
for (int j = 1; j <= m; j++)
{
if (candiai[j] == i)
{
addn++;
}
}
rec[i] = addn;
}
for (int i = 1; i <= n; i++)
{
if (maxn < rec[i])
{
maxn = rec[i];
maxi = i;
}
}
for (int i = 1; i <= n; i++)
{
assert(!i);
if (maxn == rec[i])
{
if (i < maxi)
{
maxi = i;
}
}
}
printf("%d\n", maxi);
}

return 0;
}


B. Simple Game

根据獲勝條件編碼

#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <vector>
#include <cmath>
#include <algorithm>
#include <set>
#include <map>
#include <queue>
#include <ctime>

#define pb push_back
#define ll long long
#define mp make_pair
#define f first
#define s second
#define pii pair < int, int >
#define ull unsigned long long
#define pll pair < ll, ll >
#define forit(s) for(__typeof(s.begin()) it = s.begin(); it != s.end(); it ++)
#define all(s) s.begin(), s.end()

const int inf = (1ll << 31) - 1;
const int maxn = (int) 1e5 + 10;
#define max(a, b) ((a) > (b) ? (a) : (b))
#define min(a, b) ((a) < (b) ? (a) : (b))
using namespace std;
int n = 0, m = 0;
int main()
{
//freopen("data_B.txt", "r", stdin);
int ans = 0;
while(scanf("%d%d", &n, &m) != EOF)
{
if (n == 1)
{
printf("1\n");

}else
{
if (n - m > m - 1)
{
printf("%d\n", m + 1);
}else
{
printf("%d\n", m - 1);
}
}

}
return 0;
}


C. Replacement

1.统计相邻字符是’.’的个数,在不查询的情况下, 个数即为所求的答案

2.每次查询都会更改相邻字符是’.’的個數,減掉減少的個數即可

#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <vector>
#include <cmath>
#include <algorithm>
#include <set>
#include <map>
#include <queue>
#include <ctime>

#define pb push_back
#define ll long long
#define mp make_pair
#define f first
#define s second
#define pii pair < int, int >
#define ull unsigned long long
#define pll pair < ll, ll >
#define forit(s) for(__typeof(s.begin()) it = s.begin(); it != s.end(); it ++)
#define all(s) s.begin(), s.end()

const int inf = (1ll << 31) - 1;
const int maxn = (int) 1e5 + 10;
#define max(a, b) ((a) > (b) ? (a) : (b))
#define min(a, b) ((a) < (b) ? (a) : (b))
using namespace std;
char s[301000];
int ans = 0, addn = 0;
int n = 0, m = 0;
int used[301000];
int main()
{
//freopen("data_C.txt", "r", stdin);
while(scanf("%d%d", &n, &m) != EOF)
{
memset(used, 0, sizeof(used));
ans = 0;
addn = 0;
scanf("%s", s);
for (int i = 0; i < n; i++)
{
if (s[i] == '.')
{
ans++;
if (i == 0 || s[i - 1] != '.')
{
addn++;
}
used[i + 1] = 1;
}
}
for (int i = 0; i < m; i++)
{
int a = 0;
char b;
scanf("%d %c", &a, &b);
int f = 0;
if (b == '.')
{
f = 1;
}else
{
f = 0;
}
if (f != used[a])
{
if (used[a])
{
ans--;
}else
{
ans++;
}
if (used[a - 1] && used[a + 1] && !f)
{
addn++;
}
if (used[a - 1] && used[a + 1] && f)
{
addn--;
}
if (!used[a - 1] && !used[a + 1] && !f)
{
addn--;
}
if (!used[a - 1] && !used[a + 1] && f)
{
addn++;
}
}
used[a] = f;
printf("%d\n", ans - addn);
}
}
return 0;
}


D. Tree Requests

第一次使用这么强大的stl,stl学习链接

#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <vector>
#include <cmath>
#include <algorithm>
#include <set>
#include <map>
#include <queue>
#include <ctime>

#define pb push_back
#define ll long long
#define mp make_pair
#define f first
#define s second
#define pii pair < int, int >
#define ull unsigned long long
#define pll pair < ll, ll >
#define forit(s) for(__typeof(s.begin()) it = s.begin(); it != s.end(); it ++)
#define all(s) s.begin(), s.end()
#define mk make_pair
const int inf = (1ll << 31) - 1;
const int maxn = (int) 1e5 + 10;
const ll dd = 2e6 + 7;
#define max(a, b) ((a) > (b) ? (a) : (b))
#define min(a, b) ((a) < (b) ? (a) : (b))
using namespace std;
vector<int> P[dd];
vector<pair<int, int> >H[dd];
int in[dd], out[dd];
int A[31];
int ti = 0;
string s;
int n = 0, m = 0;

void dfs(int v, int h)
{
in[v] = ++ti;
H[h].push_back(mk(ti, H[h].back().second ^ A[s[v] - 'a']));
for (int  i = 0; i < P[v].size(); i++)
{
dfs(P[v][i], h + 1);
}
out[v] = ++ti;
}
int main()
{
//freopen("data_D.txt", "r", stdin);
while(scanf("%d%d", &n, &m) != EOF)
{
for (int i = 0; i < n; i++)
{
H[i].resize(1);
}
for (int i = 0; i < 30; i++)
{
A[i] = 1 << i;
}
for (int i = 0; i < n - 1; i++)
{
int t = 0;
scanf("%d", &t);
P[t - 1].push_back(i + 1);
}
cin>>s;
dfs(0, 0);
for (int i = 0; i < m; i++)
{
int h = 0, v = 0;
scanf("%d%d", &v, &h);
v--;
h--;
int l = lower_bound(H[h].begin(), H[h].end(), mk(in[v], -1)) - H[h].begin() - 1;
int r = lower_bound(H[h].begin(), H[h].end(), mk(out[v], -1)) - H[h].begin() - 1;
int t = H[h][l].second ^ H[h][r].second;
bool ok = t - (t & -t);
if (!ok)
{
printf("Yes\n");
}else
{
printf("No\n");
}
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: