您的位置:首页 > 其它

NEERC 2014 took place in St. Petersburg, Barnaul, Tbilisi and Tashkent on December 6-7, 2014

2015-10-03 17:47 357 查看
A. 

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>

using namespace std;
int n, m;

int main()
{
freopen("alter.in", "r", stdin);
freopen("alter.out", "w", stdout);

while(~scanf("%d%d", &n, &m))
{
int ans ;
//if(n == 2)
ans = n / 2 + m / 2;
printf("%d\n", ans);
int f1 = 0, f2 = 0;
if(n & 1) f1 = 1;
if(m & 1) f2 = 1;

int i = 1, j = 1;
if(m & 1) i = 2;
if(n & 1) j = 2;

for( ; i <= m; i += 2)
{
printf("1 %d %d %d\n", i, n, i);
}

for( ; j <= n; j += 2)
{
printf("%d 1 %d %d\n", j, j, m);
}
}
return 0;
}

B.
#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>
#include <cmath>
using namespace std;
const int MAXN = 1e5 + 10;

struct Node {
double g, a, b, s;
int id;
};
Node node[MAXN];
int n;
double a, b, sa, sb;

bool cmp1( const Node &a, const Node &b ) {
return a.a / a.b > b.a / b.b;
}

bool cmp2( const Node &a, const Node &b ) {
return a.id < b.id;
}

int main() {
freopen( "burrito.in", "r", stdin );
freopen( "burrito.out", "w", stdout );
scanf( "%d%lf%lf", &n, &a, &b );
sa = sb = 0;
for( int i = 0; i < n; ++i ) {
scanf( "%lf%lf%lf", &node[i].g, &node[i].a, &node[i].b );
node[i].s = 0.0; node[i].id = i;
}
sort( node, node + n, cmp1 );
for( int i = 0; i < n; ++i ) {
if( node[i].b == 0.0 ) {
sa += node[i].g * node[i].a;
node[i].s = node[i].g;
continue;
}
if( b >= node[i].g * node[i].b ) {
b -= node[i].g * node[i].b;
sa += node[i].g * node[i].a;
sb += node[i].g * node[i].b;
node[i].s = node[i].g;
} else {
double k = b / node[i].b;
b -= k * node[i].b;
sa += k * node[i].a;
sb += k * node[i].b;
node[i].s = k;
}
if( b == 0.0 ) break;
}
sort( node, node + n, cmp2 );
if( sa < a ) puts( "-1 -1" );
else {
printf( "%.10f %.10f\n%.10f", sa, sb, node[0].s );
for( int i = 1; i < n; ++i ) {
printf( " %.10f", node[i].s );
}
puts( "" );
}
return 0;
}

J.
#include <cstdio>
#include <vector>
#include <cstring>
#include <iostream>
#include <algorithm>

using namespace std;
#define N 100
char s
;
int a
;
int _hash
;
int m, n;
bool flag, mark;
int go
;

void dfs(int pos, int flag)
{
//cout << "pos: " << pos << endl;
if(mark) return ;

if(pos == m + 1)
{
for(int i = 1; i <= n; i++)
if(!_hash[i]) return;

mark = true;
memset(go, 0, sizeof go);
for(int i = 1; i <= n; i++)
{
//cout << i << " : " << _hash[i] << endl;
go[_hash[i]] = i;
}
int cnt = 0;
for(int i = 1; i <= m; i++)
{
if(go[i])
{
++cnt == n ? printf("%d\n", go[i]) : printf("%d ", go[i]);
}
}
}

if(flag)
{
int t = a[pos - 1] * 10 + a[pos];
if(t <= n)
{
if(_hash[t])
return;

_hash[t] = pos - 1;
dfs(pos + 1, 0);
_hash[t] = 0;
}
}
else
{
if(_hash[a[pos]])
{
dfs(pos + 1, 1);
}
else
{
dfs(pos + 1, 1);

_hash[a[pos]] = pos;
dfs(pos + 1, 0);
_hash[a[pos]] = 0;
}
}

}

int main()
{
freopen("joke.in", "r", stdin);
freopen("joke.out", "w", stdout);

while(~scanf("%s", s + 1))
{
mark = false;
memset(_hash, 0, sizeof _hash);
m = strlen(s + 1);

for(int i = 1; i <= m; i++) a[i] = (s[i] - '0');
if(m > 9)
n = (m + 9) / 2;
else n = m;

dfs(0, 0);
}
return 0;
}

/*

4111109876532

*/

F.
#include <iostream>
#include <cstring>
#include <bitset>
#include <cstdio>
#include <vector>
using namespace std;
typedef long long LL;
const int MAXN = 1000 + 10;

bitset<MAXN> b[MAXN], c[MAXN];
vector<int> ans;
int a[MAXN];
char str[1000];
int m, f, n, q, uk;

int getint( char c ) {
int ans = 0;
if( '0' <= c && c <= '9' ) return c - '0';
return c - 'a' + 10;
}

int main() {
freopen( "filter.in", "r", stdin );
freopen( "filter.out", "w", stdout );
scanf( "%d%d", &m, &f );
for( int i = 0; i < f; ++i ) scanf( "%d", a + i );
scanf( "%d", &n );
for( int i = 0; i < n; ++i ) {
scanf( "%s", str );
for( int j = 0; j < strlen( str ); ++j ) {
int tmp = getint( str[j] );
for( int k = 0; k < 4; ++k ) {
if( ( 1 << k ) & tmp ) {
b[i][j * 4 + k] = 1;
}
}
}
}
scanf( "%d", &q );
for( int i = 0; i < q; ++i ) {
scanf( "%d", &uk );
for( int j = 0; j < f; ++j ) {
c[i][( ( LL )uk * a[j] ) % m] = 1;
}
}
for( int i = 0; i < n; ++i ) {
for( int j = 0; j < q; ++j ) {
if( ( b[i] & c[j] ) == c[j] ) {
ans.push_back( i );
break;
}
}
}
printf( "%d", ans.size() );
for( int i = 0; i < ans.size(); ++i ) {
printf( " %d", ans[i] );
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ACM