SDUT 2022 summer team contest 1st(for 21)

前言:顺心鲸鱼就是 拉 啦(bushi

是我太拉跨了,今天久违的组队赛我们打的稀烂

D - Dice Game

 Kattis - dicegame 

Gunnar and Emma play a lot of board games at home, so they own many dice that are not normal 66-sided dice. For example they own a die that has 1010 sides with numbers 47, 48, \ldots , 5647,48,…,56 on it.

There has been a big storm in Stockholm, so Gunnar and Emma have been stuck at home without electricity for a couple of hours. They have finished playing all the games they have, so they came up with a new one. Each player has 2 dice which he or she rolls. The player with a bigger sum wins. If both sums are the same, the game ends in a tie.

Task

Given the description of Gunnar’s and Emma’s dice, which player has higher chances of winning?

All of their dice have the following property: each die contains numbers a, a+1, \dots , ba,a+1,…,b, where aa and bb are the lowest and highest numbers respectively on the die. Each number appears exactly on one side, so the die has b-a+1b−a+1 sides.

Input

The first line contains four integers a_1, b_1, a_2, b_2a1​,b1​,a2​,b2​ that describe Gunnar’s dice. Die number ii contains numbers a_ i, a_ i + 1, \dots , b_ iai​,ai​+1,…,bi​ on its sides. You may assume that 1\le a_ i \le b_ i \le 1001≤ai​≤bi​≤100. You can further assume that each die has at least four sides, so a_ i + 3\le b_ iai​+3≤bi​.

The second line contains the description of Emma’s dice in the same format.

Output

Output the name of the player that has higher probability of winning. Output “Tie” if both players have same probability of winning.

Sample 1

InputcopyOutputcopy
1 4 1 4
1 6 1 6
Emma

Sample 2

InputcopyOutputcopy
1 8 1 8
1 10 2 5
Tie

Sample 3

InputcopyOutputcopy
2 5 2 7
1 5 2 5
Gunnar

 签到

/*Where there is light, in my heart.*/
/*SUMMER_TRAINING DAY 22*/
#include <bits/stdc++.h>
#include <iostream>
#include <cstring>
#include <queue>
#include <algorithm>
using namespace std;
//
#define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
//#define INF 0x3f3f3f
#define ll long long
#define INF 0x3f3f3f3f
#define mem(a,b) memset(a,b,sizeof(a))
#define unmap(a,b) unordered_map<a,b>
#define unset(a) unordered_set<a>
#define F first
#define S second·
#define pb push_back
#define rep(i, a, b) for (int i = (a); i <= (b); ++i)
#define _rep(i, a, b) for (int i = (a); i >= (b); --i)
#define mode 1e4+7
#define pi acos(-1)
typedef double db;
typedef pair<int,int> PII;
typedef pair<ll,ll> PLL;
typedef vector<int> vi;
const int N=2e5+5;
//
signed main(){
	int sum1=0,sum2=0;
	int x,y;
	for(int i=0;i<4;i++){
		cin>>x;
		sum1+=x;
	}
	for(int i=0;i<4;i++){
		cin>>y;
		sum2+=y;
	}
	if(sum1>sum2) cout<<"Gunnar"<<endl;
	else if(sum1<sum2) cout<<"Emma"<<endl;
	else cout<<"Tie"<<endl;
}
//made by shun 20220725

E - Opening Ceremony

 Kattis - ceremony 

For the grand opening of the algorithmic games in NlogNsglow, a row of tower blocks is set to be demolished in a grand demonstration of renewal. Originally the plan was to accomplish this with controlled explosions, one for each tower block, but time constraints now require a hastier solution.

To help you remove the blocks more rapidly you have been given the use of a Universal Kinetic / Incandescent Energy Particle Cannon (UKIEPC). On a single charge, this cutting-edge contraption can remove either all of the floors in a single tower block, or all the xx-th floors in all the blocks simultaneously, for user’s choice of the floor number xx. In the latter case, the blocks that are less than xx floors high are left untouched, while for blocks having more than xx floors, all the floors above the removed xx-th one fall down by one level.

Task

Given the number of floors of all towers, output the minimum number of charges needed to eliminate all floors of all blocks.

Input

The first line of input contains the number of blocks nn, where 2 \leq n \leq 100\, 0002≤n≤100000. The second line contains nn consecutive block heights h_ ihi​ for i=1,2,\ldots ,ni=1,2,…,n, where 1 \leq h_ i \leq 1\, 000\, 0001≤hi​≤1000000.

Output

Output one line containing one integer: the minimum number of charges needed to tear down all the blocks.

Sample 1

InputcopyOutputcopy
6
2 1 8 8 2 3
5

Sample 2

InputcopyOutputcopy
5
1 1 1 1 10
2

 

#include <bits/stdc++.h>
#include <iostream>
#include <cstring>
#include <queue>
#include <algorithm>
#include <cstdio>
#define INF 0x3f3f3f3f
#define ll long long
#define ull unsigned long long
#define inf 0x3f3f3f3f3f3f3f3f
#define mem(a, b) memset(a, b, sizeof(a))
#define rep(i, a, b) for (auto i = a; i <= b; ++i)
#define bep(i, a, b) for (auto i = a; i >= b; --i)
#define lowbit(x) x &(-x)
#define PII pair<int, int>
#define PLL pair<ll, ll>
#define PI acos(-1)
#define pb push_back
#define eps 1e-6
#define X1 first
#define Y1 second
#define IOS                      \
    ios::sync_with_stdio(false); \
    cin.tie(0);                  \
    cout.tie(0);
const int MO = 1e9 + 10;
const int NN = 1e8 + 10;
const int MM = 1e7 + 10;
const int N = 1e6 + 10;
const int M = 2e5 + 10;
int dx[] = {-1, 0, 1, 0};
int dy[] = {0, 1, 0, -1};
int dxy[][2] = {{0, 1}, {1, 0}, {1, 1}, {-1, 1}};
using namespace std;

int n;
int a[N];
int main()
{
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		cin>>a[i];
	}
	sort(a+1,a+n+1);
	int ans=n;
	for(int i=1;i<=n;i++)
	{
		int sum=i+a[n-i];
		ans=min(ans,sum);
	}
	cout<<ans<<endl;
	return 0;
}

H - Clock Pictures

 Kattis - clockpictures 

You have two pictures of an unusual kind of clock. The clock has nn hands, each having the same length and no kind of marking whatsoever. Also, the numbers on the clock are so faded that you can’t even tell anymore what direction is up in the picture. So the only thing that you see on the pictures, are nn shades of the nn hands, and nothing else.

You’d like to know if both images might have been taken at exactly the same time of the day, possibly with the camera rotated at different angles.

Task

Given the description of the two images, determine whether it is possible that these two pictures could be showing the same clock displaying the same time.

Input

The first line contains a single integer nn (2 \leq n \leq 200\, 0002≤n≤200000), the number of hands on the clock.

Each of the next two lines contains nn integers a_ iai​ (0 \leq a_ i < 360\, 0000≤ai​<360000), representing the angles of the hands of the clock on one of the images, in thousandths of a degree. The first line represents the position of the hands on the first image, whereas the second line corresponds to the second image. The number a_ iai​ denotes the angle between the recorded position of some hand and the upward direction in the image, measured clockwise. Angles of the same clock are distinct and are not given in any specific order.

Output

Output one line containing one word: possible if the clocks could be showing the same time, impossible otherwise.

Figure 1: Sample input 2

Sample 1

InputcopyOutputcopy
6
1 2 3 4 5 6
7 6 5 4 3 1
impossible

Sample 2

InputcopyOutputcopy
2
0 270000
180000 270000
possible

Sample 3

InputcopyOutputcopy
7
140 130 110 120 125 100 105
235 205 215 220 225 200 240
impossible
#include <bits/stdc++.h>
#include <iostream>
#include <cstring>
#include <queue>
#include <algorithm>
#include <cstdio>
#define INF 0x3f3f3f3f
#define ll long long
#define ull unsigned long long
#define inf 0x3f3f3f3f3f3f3f3f
#define mem(a, b) memset(a, b, sizeof(a))
#define rep(i, a, b) for (auto i = a; i <= b; ++i)
#define bep(i, a, b) for (auto i = a; i >= b; --i)
#define lowbit(x) x &(-x)
#define PII pair<int, int>
#define PLL pair<ll, ll>
#define PI acos(-1)
#define pb push_back
#define eps 1e-6
#define X1 first
#define Y1 second
#define IOS                      \
	ios::sync_with_stdio(false); \
	cin.tie(0);                  \
	cout.tie(0);
const int MO = 1e9 + 10;
const int NN = 1e8 + 10;
const int MM = 1e7 + 10;
const int N = 1e6 + 10;
const int M = 2e5 + 10;
int dx[] = {-1, 0, 1, 0};
int dy[] = {0, 1, 0, -1};
int dxy[][2] = {{0, 1}, {1, 0}, {1, 1}, {-1, 1}};
using namespace std;

int Next[MM];
int a[MM];
int b[MM];
int cha1[MM];
int cha2[MM];
int n;

/* void getNext()
{
	Next[0] = -1;
	int k = -1, j = 0;
	while (j < 2 * n - 1)
	{
		if (k == -1 || cha1[j] == cha1[k])
		{
			Next[++j] = ++k;
		}
		else
		{
			k = Next[k];
		}
	}
} */

void getNext()
{
	int i, j;
	i = 0;
	Next[0] = j = -1;
	while (i < n)
	{
		if (j == -1 || cha1[i] == cha1[j])
		{
			Next[i + 1] = j + 1;
			if (cha1[j + 1] == cha1[i + 1])
				Next[i + 1] = Next[j + 1];
			i++;
			j = j + 1;
		}
		else
			j = Next[j];
	}
}

bool kmp(){
    int i,j;
    i=j=0;
    while(i<2*n && j<n){
        if(j==-1 || cha1[i]==cha2[j]){
            i++;
            j++;
        }
        else j=Next[j];
    }
    if(j==n) return true;
    else return false;
}

int main()
{
	cin >> n;
	for (int i = 0; i < n; i++)
	{
		cin >> a[i];
		a[i] %= 360;
	}
	for (int i = 0; i < n; i++)
	{
		cin >> b[i];
		b[i] %= 360;
	}
	sort(a, a + n);
	sort(b, b + n);
	for (int i = 0; i < n - 1; i++)
	{
		cha1[i] = a[i + 1] - a[i];
		cha2[i] = b[i + 1] - b[i];
	}
	cha1[n - 1] = 360 - (a[n - 1] - a[0]);
	cha2[n - 1] = 360 - (b[n - 1] - b[0]);
	for (int i = n; i <= 2 * n - 1; i++)
	{
		cha1[i] = cha1[i - n];
	}
	getNext();
	if (kmp())
		cout << "possible" << endl;
	else
		cout << "impossible" << endl;

	return 0;
}

 

K - Train Passengers

 Kattis - trainpassengers 

The Nordic Company of Passing Carriages is losing money at an alarming rate because most of their trains are empty. However, on some lines the passengers are complaining that they cannot fit in the cars and have to wait for the next train!

The authorities want to fix this situation. They asked their station masters to write down, for a given train, how many people left the train at their station, how many went in, and how many had to wait. Then they hired your company of highly paid consultants to assign properly sized trains to their routes.

You just received the measurements for a train, but before feeding them to your optimisation algorithm you remembered that they were collected on a snowy day, so any sensible station master would have preferred to stay inside their cabin and make up the numbers instead of going outside and counting.

Verify your hunch by checking whether the input is inconsistent, i.e., at every time the number of people in the train did not exceed the capacity nor was below 00 and no passenger waited in vain (i.e., waited on the station when there was room in the train). The train should start and finish the journey empty, in particular passengers should not wait for the train at the last station.

Input

The first line contains two integers CC and nn (1 \leq C \leq 10^91≤C≤109, 2 \leq n \leq 1002≤n≤100), the total capacity and the number of stations the train stops in. The next nn lines contain three integers each, the number of people that left the train, entered the train, and had to stay at a station. Lines are given in the same order as the train visits each station. All integers are between 00 and 10^9109 inclusive.

Output

One line containing one word: possible if the measurements are consistent, impossible otherwise.

Sample 1

InputcopyOutputcopy
1 2
0 1 1
1 0 0
possible

Sample 2

InputcopyOutputcopy
1 2
1 0 0
0 1 0
impossible

Sample 3

InputcopyOutputcopy
1 2
0 1 0
1 0 1
impossible

Sample 4

InputcopyOutputcopy
1 2
0 1 1
0 0 0
impossible
#include <bits/stdc++.h>
#include <iostream>
#include <cstring>
#include <queue>
#include <algorithm>
using namespace std;
//
#define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
//#define INF 0x3f3f3f
#define ll long long
#define INF 0x3f3f3f3f
#define mem(a,b) memset(a,b,sizeof(a))
#define unmap(a,b) unordered_map<a,b>
#define unset(a) unordered_set<a>
#define F first
#define S second·
#define pb push_back
#define rep(i, a, b) for (int i = (a); i <= (b); ++i)
#define _rep(i, a, b) for (int i = (a); i >= (b); --i)
#define mode 1e4+7
#define pi acos(-1)
typedef double db;
typedef pair<int,int> PII;
typedef pair<ll,ll> PLL;
typedef vector<int> vi;
const int N=2e5+5;
//
signed main(){
    int num,t;
    cin>>num>>t;
    int dd,tt,ww;
    int sum=0;
    int flag=1;
    while(t--){
        cin>>dd>>tt>>ww;
        if(flag){
        sum-=dd;
        if(sum<0){
            flag=0;
            continue;
        }
        sum+=tt;
        if(num-sum<0){
            flag=0;
            continue;
        }
        else if(num-sum>0&&ww>0){
            flag=0;
            continue;
        }
        }
    }
    if(flag&&sum==0) cout<<"possible"<<endl;
    else cout<<"impossible"<<endl;
}

//made by happywhale 20220726

 总结:读了个寂寞的题,读了B,I,结果这俩血难,B队友说是dfs但是没写好,结赛以后甚至题解都搜不到,要进一步调整跟帮的思路了,然后就是不会的太多了,C题 那个什么数,我们都不知道,唉

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值