我是靠谱客的博主 舒心歌曲,最近开发中收集的这篇文章主要介绍ACM-ICPC 2016 大连赛区现场赛 A,D,F,B,J,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

题目链接:Wrestling Match

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int maxn=1e6+7;
int go[maxn],vis[maxn],col[maxn],bad[maxn];
vector<int >vec[maxn];
int dfs(int u){
go[u]=1;
for(int v:vec[u])
{
if(!col[v] &&!bad[v] ){
col[v]=col[u]^1;
if(!dfs(v)) return 0;
}
else if(col[v]==col[u])
return 0;
}
return 1;
}
int main(){
int n,m,x,y;
while(~scanf("%d %d %d %d",&n,&m,&x,&y)){
for(int i=0;i<=n;i++) vec[i].clear(),bad[i]=0,col[i]=0,go[i]=0,vis[i]=0;
for(int i=1;i<=m;i++){
int u,v;scanf("%d%d",&u,&v);
vec[u].push_back(v);vec[v].push_back(u);
vis[u]=vis[v]=1;
}
for(int i=1;i<=x;i++){
int u;scanf("%d",&u);
vis[u]=col[u]=1;
}
for(int i=1;i<=y;i++){
int u;scanf("%d",&u);
vis[u]=bad[u]=1;
col[u]=0;
}
int cnt=0;
for(int i=1;i<=n;i++) if(vis[i]) cnt++;
if(cnt<n) printf("NOn");
else{
for(int i=1;i<=n;i++){
if(go[i]) continue;
if(!dfs(i)) goto ed;
}
printf("YESn");
continue;
ed:
printf("NOn");
}
}
return 0;
}

题目链接:Regular Number

/**
*
*
* 输出所给字符串中所有的能够表示的字符串。表示:每一行选择一个数字所形成的字符串 看样例。
*
*
*
* [样例输入]
* 4
* 3 0 9 7
* 2 5 7
* 2 2 5
* 2 4 5
* 09755420524
*
* [输出]:
*
* 9755
* 7554
* 0524
*
* bitset
*
*/
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int maxn = 1e3 + 7;
bitset<maxn> now[20];
bitset<maxn> tmp;
char ss[5100000];
int main() {
for (int i = 0; i < 20; i++) now[i].reset();
int t;
scanf("%d", &t);
for (int ii = 0; ii < t; ii++) {
int n;
scanf("%d", &n);
for (int i = 0; i < n; i++) {
int x;
scanf("%d", &x);
now[x].set(ii);
}
}
scanf("%s", ss);
tmp.reset();
int sz = strlen(ss);
for (int i = 0; i < sz; i++) {
tmp = tmp << 1;
tmp[0] = 1;
tmp &= now[ss[i] - '0'];
if (tmp[t - 1] == 1) {
char zx=ss[i+1];
ss[i+1]='';
printf("%sn",ss+i-t+1);
ss[i+1]=zx;
//
for (int j = i - t + 1; j <= i; j++)
//
printf("%c", ss[j]);
//
printf("n");血T
}
}
return 0;
}

题目链接:A Simple Math Problem 

/**
* x+y=a,lcm(x,y)=b;
* 找 x,y;
*
* i*(a-i)=b*gcd(a,a-i);
* 枚举gcd就ok了
*
*/
#include<bits/stdc++.h>
#define ll long long
using namespace std;
bool judge(ll x) {
if (x < 0) return 0;
ll xx = sqrt(x * 1.0);
return xx * xx == x;
}
ll gcd(ll a,ll b){
return b==0?a:gcd(b,a%b);
}
ll lcm(ll a,ll b){
return
a/gcd(a,b)*b;
}
void solve(ll a, ll b) {
vector<ll> vec;
for (ll i = 1; i * i <= a; i++) {
if (a % i == 0) {
if (i * i != a) vec.push_back(i);
vec.push_back(a / i);
}
}
for (auto x:vec) {
if (judge(a * a - 4 * b * x)) {
ll zx = (ll) (sqrt(a * a * 1.0 - 4 * b * x));
if(a>zx&&(a-zx)%2==0){
if(lcm((a-zx)/2,a-(a-zx)/2)==b) {
printf("%lld %lldn", (a - zx) / 2, a - (a - zx) / 2);
return;
}
}
if((a+zx)%2==0&&(a+zx)<a*2) {
if(lcm((a+zx)/2,a-(a+zx)/2)==b) {
printf("%lld %lldn", (a + zx) / 2, a - (a + zx) / 2);
return;
}
}
}
}
printf("No Solutionn");
}
int main() {
ll a, b;
while (~scanf("%lld %lld", &a, &b)) solve(a, b);
return 0;
}

题目链接:Detachment

/*
* [链接]:
*
* [题意]: 构造一个和为n的每个元素不相同的数组,使数组每一项的乘积最大。
*
*
*
* [分析]:显然均摊即可。
*
* [tricks]:
*
* [时间复杂度]:
*
* */
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const ll mod = 1e9 + 7;
const ll maxn = 1e6 + 7;
ll inv_fac[maxn], fac[maxn];
ll zx[maxn];
ll ksm(ll a, ll b) {
ll ans = 1;
while (b) {
if (b & 1) ans = ans * a % mod;
b >>= 1;
a = a * a % mod;
}
return ans;
}
int cnt = 0;
void init() {
ll now = 0;
for (ll i = 2; i < maxn; i++) {
now += i;
zx[cnt++] = now;
}
fac[1] = 1, fac[0] = 1, inv_fac[1] = inv_fac[0] = 1;
for (ll i = 2; i < maxn; i++) fac[i] = fac[i - 1] * i % mod, inv_fac[i] = ksm(fac[i], mod - 2);
}
void solve(int T) {
ll x;
scanf("%lld", &x);
if (x <= 1) {
printf("%lldn", x);
return;
}
ll pos = lower_bound(zx, zx + cnt, x) - (zx);
if (zx[pos] == x) {
printf("%lldn", fac[pos + 2]);
return;
}
pos--;
ll res = x - zx[pos];
ll juntan = res / (pos + 1);
ll shengyu = res % (pos + 1);
ll zxr = pos + 2 + juntan + 1;
ll zxl = zxr - shengyu + 1;
ll ans = fac[zxr] * inv_fac[zxl - 1] % mod;
ans = ans * fac[zxl - 2] % mod;
ans = ans * inv_fac[juntan + 2 - 1] % mod;
printf("%lldn", ans);
}
int main() {
//
cout<<50<<endl;
//
for(int i=1;i<=50;i++) cout<<i<<endl;
//
printf("%lldn",24*42*8);
init();
int T;
scanf("%d", &T);
while (T--) solve(T);
return 0;
}

题目链接:Find Small A 

/*
* [链接]:HDU5980
*
* [题意]:每个数字都可以表示成32位的二进制数,问每个数字表示成这样的数字每个字中存在多少个97;
*
* [分析]:
*
* [tricks]:
*
* [时间复杂度]:
*
* */
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const ll mod = 1e9 + 7;
const ll maxn = 1e6 + 7;
ll a[maxn];
void solve(int T) {
int n;
cin >> n;
int ans = 0;
for (int i = 1; i <= n; i++) {
int x;
cin >> x;
while (x) {
ans += x % (1 << 8) == 97;
x /= (1 << 8);
}
}
cout << ans << endl;
}
int main() {
int T = 1;
while (T--) solve(T);
return 0;
}

 

最后

以上就是舒心歌曲为你收集整理的ACM-ICPC 2016 大连赛区现场赛 A,D,F,B,J的全部内容,希望文章能够帮你解决ACM-ICPC 2016 大连赛区现场赛 A,D,F,B,J所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(50)

评论列表共有 0 条评论

立即
投稿
返回
顶部